home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / internet / weblibev / maindlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-30  |  63.5 KB  |  2,434 lines

  1. // maindlg.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <fstream.h>
  6. #include <windowsx.h>
  7. #include "wltestc.h"
  8. #include "maindlg.h" 
  9. #include "wlapidlg.h"
  10.  
  11. #ifdef _DEBUG
  12. #undef THIS_FILE
  13. static char BASED_CODE THIS_FILE[] = __FILE__;
  14. #endif
  15.  
  16. #define ID_SYSMENU_LOG            0x80
  17.  
  18. #define WM_APP_APIDLGDESTROY    (WM_USER + 5000)
  19.  
  20. extern CWLTestApp NEAR theApp;
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CMainDlg dialog
  24.  
  25. BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
  26.     //{{AFX_MSG_MAP(CMainDlg)
  27.     ON_WM_SYSCOMMAND()
  28.     ON_BN_CLICKED(IDC_BROWSER, OnBrowserAPI)
  29.     ON_BN_CLICKED(IDC_HTML, OnHtmlAPI)
  30.     ON_BN_CLICKED(IDC_TOOLBAR, OnToolbarAPI)
  31.     ON_BN_CLICKED(IDC_UTIL, OnUtilAPI)
  32.     ON_BN_CLICKED(IDC_GO_BTN, OnGoBtn)
  33.     ON_LBN_DBLCLK(IDC_LISTAPI, OnDblclkListapi)
  34.     ON_LBN_SELCHANGE(IDC_LISTAPI, OnSelchangeListapi)
  35.     ON_BN_CLICKED(IDC_NOTIFY_BTN, OnNotifyBtn)
  36.     ON_BN_CLICKED(IDC_STATUS_BTN, OnStatusBtn) 
  37.     ON_UPDATE_COMMAND_UI(IDC_NOTIFY_BTN, OnNotifyUpdateCmdUI)
  38.     ON_UPDATE_COMMAND_UI(IDC_STATUS_BTN, OnStatusUpdateCmdUI)
  39.     ON_MESSAGE(WM_WEBLIB_NOTIFY, OnApiNotification)
  40.     ON_MESSAGE(WM_WEBLIB_ENUMPARSETREE, OnEnumParseTree)
  41.     ON_MESSAGE(WM_WEBLIB_ENUMFINDTEXT, OnEnumFindText)
  42.     ON_MESSAGE(WM_WEBLIB_ENUMFINDSPEC, OnEnumFindSpecial)
  43.     ON_MESSAGE(WM_WEBLIB_ENUMFINDCOMM, OnEnumFindComment)
  44.     ON_MESSAGE(WM_WEBLIB_ENUMFINDTAGTYPE, OnEnumFindTagType)
  45.     ON_MESSAGE(WM_WEBLIB_ENUMFINDTAGNAME, OnEnumFindTagName)
  46.     ON_MESSAGE(WM_WEBLIB_ENUMFINDTAGATTR, OnEnumFindTagAttr) 
  47.     ON_MESSAGE(WM_APP_APIDLGDESTROY, OnApiDlgDestroy) 
  48.     ON_WM_DESTROY()
  49.     //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51.  
  52. CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/) : CDialog(CMainDlg::IDD, pParent)
  53. {
  54.     //{{AFX_DATA_INIT(CMainDlg)
  55.     //}}AFX_DATA_INIT
  56.     
  57.     m_bLogging = AfxGetApp()->GetProfileInt("OPTIONS","LOGGING",FALSE);
  58.     m_strLogFile = AfxGetApp()->GetProfileString("OPTIONS","LOGFILE");
  59.     
  60.     m_hBrowser = NULL;
  61.     m_hToolbar = NULL;
  62.     m_hParse = NULL;
  63.     m_hFormData = NULL;
  64.     
  65.     m_hFont = NULL;
  66.     m_hElement = NULL;
  67.     m_hTagAttr = NULL;
  68.     
  69.     m_staRegURLEcho = FALSE;
  70.     m_pnfyArray = NULL;  
  71.     
  72.     // Initialize WEBLIB dynamic link library.
  73.     
  74.     if (!WLStartup())                                            
  75.         Error(IDS_ERR_WLAPI,"WLStartup"); 
  76. }
  77.  
  78. CMainDlg::~CMainDlg()
  79. {   
  80.     if (m_bLogging)
  81.         AfxGetApp()->WriteProfileString("OPTIONS","LOGFILE",m_strLogFile);
  82.     AfxGetApp()->WriteProfileInt("OPTIONS","LOGGING",m_bLogging);
  83.     
  84.     m_ListboxInfo.Detach();
  85.     m_ListboxAPI.Detach();
  86.     
  87.     if (m_hFont != NULL && m_hToolbar == NULL)
  88.         ::DeleteObject(m_hFont);
  89.     
  90.     // Detach from WEBLIB DLL.
  91.     
  92.     if (!WLCleanup())                                            
  93.         Error(IDS_ERR_WLAPI,"WLCleanup"); 
  94. }
  95.  
  96. void CMainDlg::DoDataExchange(CDataExchange* pDX)
  97. {
  98.     CDialog::DoDataExchange(pDX);
  99.     //{{AFX_DATA_MAP(CMainDlg)
  100.     //}}AFX_DATA_MAP
  101. }
  102.  
  103. BOOL CMainDlg::OnInitDialog()
  104. {
  105.     CDialog::OnInitDialog();
  106.     CenterWindow(CWnd::GetDesktopWindow());
  107.     
  108.     // Set WEBLIB default window for WLN_BROWSERSTART and WLN_BROWSEREXIT notifications.
  109.     
  110.     if (!WLSetDefaultNotify(m_hWnd,WM_WEBLIB_NOTIFY))                
  111.         Error(IDS_ERR_WLAPI,"WLSetDefaultNotify");
  112.         
  113.     // Tell DLL containing dialogs to notify us when DLL dialog is destroyed. 
  114.         
  115.     ApiDlgNotifyOnWindowDestroy(m_hWnd,WM_APP_APIDLGDESTROY);
  116.     
  117.     // Add Log... option to system menu.
  118.     
  119.     CMenu *pMenu = GetSystemMenu(FALSE);
  120.     ASSERT(pMenu != NULL);          
  121.     
  122.     CString strLogMenuText;
  123.     strLogMenuText.LoadString(IDS_LOG_MENUTEXT);
  124.     
  125.     pMenu->AppendMenu(MF_SEPARATOR);
  126.     pMenu->AppendMenu(MF_STRING,ID_SYSMENU_LOG,strLogMenuText);
  127.     
  128.     // Attach listbox class instances to controls (not very OO-like, oh well!).
  129.     
  130.     m_ListboxInfo.Attach(GetDlgItem(IDC_LISTINFO)->m_hWnd);
  131.     m_ListboxAPI.Attach(GetDlgItem(IDC_LISTAPI)->m_hWnd);
  132.     
  133.     CRect rcClient;                                        // allow horz scrolling
  134.     m_ListboxInfo.GetClientRect(rcClient);
  135.     m_ListboxInfo.SetHorizontalExtent(rcClient.Width() * 3);
  136.     
  137.     GetDlgItem(IDC_CANCELTRX_BTN)->ShowWindow(SW_HIDE);    // no trx to cancel, hide button 
  138.     
  139.     // By default, check browser API calls.
  140.     
  141.     ((CButton *) GetDlgItem(IDC_BROWSER))->SetCheck(TRUE);
  142.     OnBrowserAPI();
  143.     
  144.     return TRUE;                  // return TRUE  unless you set the focus to a control
  145. }
  146.     
  147. void CMainDlg::OnCancel()
  148. {   
  149.     GetSystemMenu(TRUE);        // restore standard system menu
  150.     CDialog::OnCancel();
  151. }
  152.  
  153. LRESULT CMainDlg::WindowProc(UINT message,WPARAM wParam,LPARAM lParam)
  154. {
  155.     LRESULT lResult = CDialog::WindowProc(message,wParam,lParam);
  156.     
  157.     if (message == WM_COMMAND)
  158.         UpdateDialogControls(this,FALSE);
  159.     return lResult;
  160. }
  161.  
  162. void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
  163. {
  164.     if ((nID & 0xFFF0) == ID_SYSMENU_LOG)                 
  165.     {
  166.         (void) ApiDlgLogging(m_strLogFile.GetBufferSetLength(_MAX_PATH),
  167.             _MAX_PATH,&m_bLogging);
  168.         m_strLogFile.ReleaseBuffer();
  169.     }
  170.     else
  171.         CDialog::OnSysCommand(nID,lParam);
  172. }
  173.  
  174. void CMainDlg::OnDestroy()
  175. {
  176.     if (m_hBrowser != NULL)
  177.         WLDisconnectBrowser(m_hBrowser,TRUE);    
  178.     if (m_hToolbar != NULL)
  179.         WLDeleteToolbar(m_hToolbar);
  180.     if (m_hParse != NULL)
  181.         WLHtmlEndParse(m_hParse);
  182.     
  183.     CDialog::OnDestroy();
  184. }
  185.  
  186. ///////////////////////////////////////////////////////////////////////////// 
  187. // When an API radio button is clicked, tailor dialog to the particular API.
  188.  
  189. void CMainDlg::OnBrowserAPI()
  190. {
  191.     CString strGoBtn;
  192.     strGoBtn.LoadString(m_hBrowser == NULL ? IDS_BTN_CONNECT : IDS_BTN_DISCONNECT);
  193.     
  194.     GetDlgItem(IDC_GO_BTN)->SetWindowText(strGoBtn);
  195.     GetDlgItem(IDC_GO_BTN)->EnableWindow(TRUE);    
  196.     GetDlgItem(IDC_STATUS_BTN)->EnableWindow(m_hBrowser != NULL);    
  197.     GetDlgItem(IDC_NOTIFY_BTN)->EnableWindow(m_hBrowser != NULL);    
  198.     
  199.     CString strApiStatic;
  200.     strApiStatic.LoadString(IDS_API_BROWSER);
  201.     GetDlgItem(IDC_API_STATIC)->SetWindowText(strApiStatic);
  202.     
  203.     m_ListboxInfo.ResetContent();
  204.     m_ListboxAPI.ResetContent();
  205.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText("");
  206.     
  207.     if (m_hBrowser != NULL)
  208.     {
  209.         for (int nIdx=0;theApp.m_pszBrowserAPIs[nIdx] != NULL;nIdx++)
  210.             m_ListboxAPI.AddString(theApp.m_pszBrowserAPIs[nIdx]);
  211.         m_ListboxAPI.SetCurSel(0);
  212.     }
  213. }
  214.  
  215. void CMainDlg::OnToolbarAPI()
  216. {   
  217.     CString strGoBtn;
  218.     strGoBtn.LoadString(m_hToolbar == NULL ? IDS_BTN_CREATE : IDS_BTN_DELETE);
  219.     
  220.     GetDlgItem(IDC_GO_BTN)->SetWindowText(strGoBtn);
  221.     GetDlgItem(IDC_GO_BTN)->EnableWindow(TRUE);    
  222.     GetDlgItem(IDC_STATUS_BTN)->EnableWindow(m_hToolbar != NULL);    
  223.     GetDlgItem(IDC_NOTIFY_BTN)->EnableWindow(m_hToolbar != NULL);    
  224.     
  225.     CString strApiStatic;
  226.     strApiStatic.LoadString(IDS_API_TOOLBAR);
  227.     GetDlgItem(IDC_API_STATIC)->SetWindowText(strApiStatic);
  228.     
  229.     m_ListboxInfo.ResetContent();
  230.     m_ListboxAPI.ResetContent();
  231.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText("");
  232.     
  233.     if (m_hToolbar != NULL)
  234.     {       
  235.         for (int nIdx=0;theApp.m_pszToolbarAPIs[nIdx] != NULL;nIdx++)
  236.             m_ListboxAPI.AddString(theApp.m_pszToolbarAPIs[nIdx]);
  237.         m_ListboxAPI.SetCurSel(0);
  238.     }
  239. }   
  240.  
  241. void CMainDlg::OnHtmlAPI()
  242. {   
  243.     CString strGoBtn;
  244.     strGoBtn.LoadString(m_hParse == NULL ? IDS_BTN_PARSE : IDS_BTN_ENDPARSE);
  245.     
  246.     GetDlgItem(IDC_GO_BTN)->SetWindowText(strGoBtn);
  247.     GetDlgItem(IDC_GO_BTN)->EnableWindow(TRUE);    
  248.     GetDlgItem(IDC_STATUS_BTN)->EnableWindow(FALSE);    
  249.     GetDlgItem(IDC_NOTIFY_BTN)->EnableWindow(m_hParse != NULL);    
  250.     
  251.     CString strApiStatic;
  252.     strApiStatic.LoadString(IDS_API_HTML);
  253.     GetDlgItem(IDC_API_STATIC)->SetWindowText(strApiStatic);
  254.     
  255.     m_ListboxInfo.ResetContent();
  256.     m_ListboxAPI.ResetContent();
  257.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText("");
  258.     
  259.     if (m_hParse != NULL)
  260.     {       
  261.         for (int nIdx=0;theApp.m_pszHtmlAPIs[nIdx] != NULL;nIdx++)
  262.             m_ListboxAPI.AddString(theApp.m_pszHtmlAPIs[nIdx]);
  263.         m_ListboxAPI.SetCurSel(0);
  264.     }
  265. }
  266.  
  267. void CMainDlg::OnUtilAPI()
  268. {
  269.     CString strGoBtn;
  270.     strGoBtn.LoadString(IDS_BTN_ACCESSDATA);
  271.     
  272.     GetDlgItem(IDC_GO_BTN)->SetWindowText(strGoBtn);
  273.     GetDlgItem(IDC_GO_BTN)->EnableWindow(m_hFormData != NULL );    
  274.     GetDlgItem(IDC_STATUS_BTN)->EnableWindow(FALSE);    
  275.     GetDlgItem(IDC_NOTIFY_BTN)->EnableWindow(FALSE);   
  276.     
  277.     CString strApiStatic;
  278.     strApiStatic.LoadString(IDS_API_UTIL);
  279.     GetDlgItem(IDC_API_STATIC)->SetWindowText(strApiStatic);
  280.     
  281.     m_ListboxInfo.ResetContent();
  282.     m_ListboxAPI.ResetContent();        
  283.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText("");
  284.     
  285.     for (int nIdx=0;theApp.m_pszUtilAPIs[nIdx] != NULL;nIdx++)
  286.         m_ListboxAPI.AddString(theApp.m_pszUtilAPIs[nIdx]);
  287.     m_ListboxAPI.SetCurSel(0);
  288. }
  289.  
  290. ///////////////////////////////////////////////////////////////////////////// 
  291. // On click of Go button, create or remove handle to browser, toolbar, parse
  292. // tree or form data. Once we have a valid handle, the API calls become available.
  293.  
  294. void CMainDlg::OnGoBtn()
  295. {
  296.     CDisableDialog disable(this);
  297.                               // for below to work, ordinal values of IDs better be correct!
  298.     switch (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL))
  299.     {
  300.         case IDC_BROWSER:
  301.             if (m_hBrowser == NULL)
  302.                 ConnectBrowserAPI();
  303.             else
  304.                 DisconnectBrowserAPI();
  305.             break;
  306.         
  307.         case IDC_TOOLBAR:
  308.             if (m_hToolbar == NULL)
  309.                 CreateToolbarAPI();
  310.             else
  311.                 DeleteToolbarAPI();
  312.             break;
  313.         
  314.         case IDC_HTML:
  315.             if (m_hParse == NULL)
  316.                 HtmlParseAPI();
  317.             else               
  318.                 HtmlEndParseAPI();
  319.             break;
  320.         
  321.         case IDC_UTIL: 
  322.             AccessFormDataAPI();
  323.             break;
  324.     }
  325. }
  326.  
  327. void CMainDlg::OnDblclkListapi()
  328. {
  329.     CDisableDialog disable(this);   
  330.     int nSelAPI = m_ListboxAPI.GetCurSel();
  331.     
  332.     switch (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL))
  333.     {
  334.         case IDC_BROWSER:
  335.             switch (nSelAPI)
  336.             { 
  337.                 case WLAPI_GetWindowInfo:
  338.                     GetWindowInfoAPI();
  339.                     break;
  340.                     
  341.                 case WLAPI_ListWindows:
  342.                     ListWindowsAPI();
  343.                     break;
  344.                     
  345.                 case WLAPI_ActivateWindow:
  346.                     ActivateWindowAPI();
  347.                     break;
  348.                     
  349.                 case WLAPI_CloseWindow:
  350.                     CloseWindowAPI();
  351.                     break;
  352.                     
  353.                 case WLAPI_SetWindowPos:
  354.                     SetWindowPosAPI();
  355.                     break;
  356.                     
  357.                 case WLAPI_ShowWindow:
  358.                     ShowWindowAPI();
  359.                     break;
  360.                     
  361.                 case WLAPI_ShowFile:
  362.                     ShowFileAPI();
  363.                     break;
  364.                     
  365.                 case WLAPI_OpenURL:
  366.                     OpenURLAPI();
  367.                     break;
  368.                     
  369.                 case WLAPI_SaveURL:
  370.                     SaveURLAPI();
  371.                     break;
  372.                     
  373.                 case WLAPI_PostFormData:
  374.                     PostFormDataAPI();
  375.                     break;
  376.                     
  377.                 case WLAPI_SaveFormData:
  378.                     SaveFormDataAPI();
  379.                        break;
  380.                        
  381.                 case WLAPI_RegisterProtocol:
  382.                     RegisterProtocolAPI();
  383.                     break;
  384.                     
  385.                 case WLAPI_UnregisterProtocol:
  386.                     UnregisterProtocolAPI();
  387.                     break;
  388.                     
  389.                 case WLAPI_RegisterURLEcho:
  390.                     RegisterURLEchoAPI();
  391.                     break;
  392.                     
  393.                 case WLAPI_UnregisterURLEcho:
  394.                         UnregisterURLEchoAPI();
  395.                     break;
  396.                     
  397.                 case WLAPI_RegisterViewer:
  398.                     RegisterViewerAPI();
  399.                     break;
  400.                     
  401.                 case WLAPI_UnregisterViewer:
  402.                     UnregisterViewerAPI();
  403.                     break;
  404.                     
  405.                 case WLAPI_RegisterWindowChange:
  406.                     RegisterWindowChangeAPI();
  407.                     break;
  408.                     
  409.                 case WLAPI_UnregisterWindowChange:
  410.                     UnregisterWindowChangeAPI();
  411.                     break;
  412.                     
  413.                 case WLAPI_ParseAnchor:
  414.                     ParseAnchorAPI();
  415.                     break;
  416.                     
  417.                 case WLAPI_GetVersion:
  418.                     GetVersionAPI();
  419.                     break;
  420.                     
  421.                 case WLAPI_QueryURLFile:
  422.                     QueryURLFileAPI();
  423.                     break;
  424.                     
  425.                 case WLAPI_SetNotifyMethod:
  426.                     SetNotifyMethodAPI();
  427.                     break;
  428.                     
  429.                    default:
  430.                       ::MessageBeep(-1);
  431.                       break;
  432.             }
  433.             break;
  434.         
  435.         case IDC_TOOLBAR:
  436.             switch (nSelAPI)
  437.             { 
  438.                 case WLAPI_IsToolbarActive:
  439.                     IsToolbarActiveAPI();
  440.                     break;
  441.                     
  442.                 case WLAPI_SetActiveToolbar:
  443.                     SetActiveToolbarAPI();
  444.                     break;
  445.                     
  446.                 case WLAPI_AddToolbarButton:
  447.                     AddToolbarButtonAPI();
  448.                     break;
  449.                     
  450.                 case WLAPI_RemoveToolbarButton:
  451.                     RemoveToolbarButtonAPI();
  452.                     break;
  453.                     
  454.                 case WLAPI_IsToolbarButtonVisible:
  455.                     IsToolbarButtonVisibleAPI();
  456.                     break;
  457.                     
  458.                 case WLAPI_ShowToolbarButton:
  459.                     ShowToolbarButtonAPI();
  460.                     break;
  461.                     
  462.                 case WLAPI_EnableToolbarButton:
  463.                     EnableToolbarButtonAPI();
  464.                     break;
  465.                     
  466.                 case WLAPI_IsToolbarButtonEnabled:
  467.                     IsToolbarButtonEnabledAPI();
  468.                     break;
  469.                     
  470.                 case WLAPI_GetToolbarText:
  471.                     GetToolbarTextAPI();
  472.                     break;
  473.                     
  474.                 case WLAPI_SetToolbarText:
  475.                     SetToolbarTextAPI();
  476.                     break;
  477.                                     
  478.                 case WLAPI_GetToolbarFont:
  479.                     GetToolbarFontAPI();
  480.                     break;
  481.                     
  482.                 case WLAPI_SetToolbarFont:
  483.                     SetToolbarFontAPI();
  484.                     break;
  485.                     
  486.                 case WLAPI_GetToolbarBkgnd:
  487.                     GetToolbarBkgndAPI();
  488.                     break;
  489.                     
  490.                 case WLAPI_SetToolbarBkgnd:
  491.                     SetToolbarBkgndAPI();
  492.                     break;
  493.                     
  494.                 case WLAPI_GetToolbarTextColor: 
  495.                     GetToolbarTextColorAPI();
  496.                     break;
  497.                     
  498.                 case WLAPI_SetToolbarTextColor: 
  499.                     SetToolbarTextColorAPI();
  500.                     break;
  501.                             
  502.                   default:
  503.                       ::MessageBeep(-1);
  504.                       break;
  505.             }
  506.             break;
  507.         
  508.         case IDC_HTML:
  509.             switch (nSelAPI)
  510.             {
  511.                 case WLAPI_HtmlEnumParseTree:
  512.                        HtmlEnumParseTreeAPI();
  513.                     break;
  514.                     
  515.                 case WLAPI_HtmlGetChild:
  516.                     HtmlGetChildAPI();
  517.                     break;
  518.                     
  519.                 case WLAPI_HtmlGetParent:
  520.                     HtmlGetParentAPI();
  521.                     break;
  522.                     
  523.                 case WLAPI_HtmlGetSibling:
  524.                     HtmlGetSiblingAPI();
  525.                     break;
  526.                     
  527.                 case WLAPI_HtmlGetElementType:
  528.                     HtmlGetElementTypeAPI();
  529.                     break;
  530.                     
  531.                 case WLAPI_HtmlGetElementText: 
  532.                     HtmlGetElementTextAPI();
  533.                     break;
  534.                     
  535.                 case WLAPI_HtmlGetTextAttr: 
  536.                     HtmlGetTextAttrAPI();
  537.                     break;
  538.                     
  539.                 case WLAPI_HtmlGetTagName: 
  540.                     HtmlGetTagNameAPI();
  541.                     break;
  542.                     
  543.                 case WLAPI_HtmlGetTagType:
  544.                     HtmlGetTagTypeAPI();
  545.                     break;
  546.                     
  547.                 case WLAPI_HtmlGetTagAttr:
  548.                     HtmlGetTagAttrAPI();
  549.                     break;
  550.                     
  551.                 case WLAPI_HtmlExtractTagAttr:
  552.                     HtmlExtractTagAttrAPI();
  553.                     break;
  554.                     
  555.                 case WLAPI_HtmlFindText:
  556.                     HtmlFindTextAPI();
  557.                     break;
  558.                     
  559.                 case WLAPI_HtmlFindSpecial:
  560.                     HtmlFindSpecialAPI();
  561.                     break;
  562.                     
  563.                 case WLAPI_HtmlFindComment:
  564.                     HtmlFindCommentAPI();
  565.                     break;
  566.                     
  567.                 case WLAPI_HtmlFindTagType:
  568.                     HtmlFindTagTypeAPI();
  569.                     break;
  570.                     
  571.                 case WLAPI_HtmlFindTagName:
  572.                     HtmlFindTagNameAPI();
  573.                     break;
  574.                     
  575.                 case WLAPI_HtmlFindTagAttr:
  576.                     HtmlFindTagAttrAPI();
  577.                     break;
  578.                     
  579.                 case WLAPI_HtmlEnumFindText:
  580.                     HtmlEnumFindTextAPI();
  581.                     break;
  582.                     
  583.                 case WLAPI_HtmlEnumFindSpecial: 
  584.                     HtmlEnumFindSpecialAPI();
  585.                     break;
  586.                     
  587.                 case WLAPI_HtmlEnumFindComment:
  588.                     HtmlEnumFindCommentAPI();
  589.                     break;
  590.                     
  591.                 case WLAPI_HtmlEnumFindTagType:
  592.                     HtmlEnumFindTagTypeAPI();
  593.                     break;
  594.                     
  595.                 case WLAPI_HtmlEnumFindTagName: 
  596.                     HtmlEnumFindTagNameAPI();
  597.                     break;
  598.                     
  599.                 case WLAPI_HtmlEnumFindTagAttr:
  600.                     HtmlEnumFindTagAttrAPI();
  601.                       break;
  602.                       
  603.                   default:
  604.                       ::MessageBeep(-1);
  605.                       break;
  606.             }
  607.             break;
  608.         
  609.         case IDC_UTIL: 
  610.             switch (nSelAPI)
  611.             {
  612.                 case WLAPI_AppendFormData:  
  613.                     AppendFormDataAPI();
  614.                      break;
  615.                      
  616.                 case WLAPI_GetFormDataLength:
  617.                        GetFormDataLengthAPI();
  618.                      break;
  619.                      
  620.                 case WLAPI_ParseAbsoluteURL:
  621.                     ParseAbsoluteURLAPI();
  622.                      break;
  623.                     
  624.                   default:
  625.                       ::MessageBeep(-1);
  626.                       break;
  627.             }
  628.             break;
  629.             
  630.         default:    
  631.             ::MessageBeep(-1);
  632.               break;
  633.     }
  634. }
  635.  
  636. void CMainDlg::OnSelchangeListapi()
  637. {   
  638.     m_ListboxInfo.ResetContent(); 
  639.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText("");
  640. }
  641.  
  642. void CMainDlg::OnNotifyBtn()
  643. {           
  644.     int nSelAPI = m_ListboxAPI.GetCurSel();
  645.  
  646.     CString strInfo;
  647.     strInfo.LoadString(IDS_NOTIFY_TITLE);
  648.     
  649.     CString strText; 
  650.     
  651.     if (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL) == IDC_TOOLBAR)
  652.         strText.LoadString(IDS_NOTIFY_TOOLBAR);
  653.     else
  654.         m_ListboxAPI.GetText(nSelAPI,strText);
  655.        
  656.     strInfo += strText;
  657.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText(strInfo);
  658.     
  659.     switch (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL))
  660.     {                     
  661.         case IDC_BROWSER:                 
  662.         {
  663.             CStringArray *pnfyArray = NULL;    
  664.             
  665.             if (nSelAPI == WLAPI_ShowFile)
  666.                 pnfyArray = &m_nfyShowFile;
  667.             else if (nSelAPI == WLAPI_OpenURL)
  668.                 pnfyArray = &m_nfyOpenURL;
  669.             else if (nSelAPI == WLAPI_SaveURL)
  670.                 pnfyArray = &m_nfySaveURL;
  671.             else if (nSelAPI == WLAPI_PostFormData)
  672.                 pnfyArray = &m_nfyPostFormData;
  673.             else if (nSelAPI == WLAPI_SaveFormData)
  674.                 pnfyArray = &m_nfySaveFormData;
  675.             else if (nSelAPI == WLAPI_RegisterProtocol)
  676.                 pnfyArray = &m_nfyRegProtocol;
  677.             else if (nSelAPI == WLAPI_RegisterURLEcho)
  678.                 pnfyArray = &m_nfyRegURLEcho;
  679.             else if (nSelAPI == WLAPI_RegisterViewer)
  680.                 pnfyArray = &m_nfyRegViewer;
  681.             else if (nSelAPI == WLAPI_RegisterWindowChange)
  682.                 pnfyArray = &m_nfyRegWindowChange;
  683.                 
  684.             if (pnfyArray != NULL)
  685.                 FillInfoListbox(*pnfyArray);
  686.             break;
  687.         }
  688.         
  689.         case IDC_TOOLBAR:
  690.             FillInfoListbox(m_nfyToolbar);
  691.             break;
  692.         
  693.         case IDC_HTML:    
  694.         {
  695.             CStringArray *pnfyArray = NULL;    
  696.                 
  697.             if (nSelAPI == WLAPI_HtmlEnumParseTree)
  698.                 pnfyArray = &m_nfyEnumParseTree;
  699.             else if (nSelAPI == WLAPI_HtmlEnumFindText)
  700.                 pnfyArray = &m_nfyEnumFindText;
  701.             else if (nSelAPI == WLAPI_HtmlEnumFindSpecial)
  702.                 pnfyArray = &m_nfyEnumFindSpecial;
  703.             else if (nSelAPI == WLAPI_HtmlEnumFindComment)
  704.                 pnfyArray = &m_nfyEnumFindComment;            
  705.             else if (nSelAPI == WLAPI_HtmlEnumFindTagType)
  706.                 pnfyArray = &m_nfyEnumFindTagType;    
  707.             else if (nSelAPI == WLAPI_HtmlEnumFindTagName)
  708.                 pnfyArray = &m_nfyEnumFindTagName;    
  709.             else if (nSelAPI == WLAPI_HtmlEnumFindTagAttr)
  710.                 pnfyArray = &m_nfyEnumFindTagAttr;
  711.             
  712.             if (pnfyArray != NULL)
  713.                 FillInfoListbox(*pnfyArray);
  714.             break;
  715.         }
  716.         
  717.         case IDC_UTIL: 
  718.             break;
  719.     }    
  720. }
  721.  
  722. void CMainDlg::OnStatusBtn()
  723. {
  724.     int nSelAPI = m_ListboxAPI.GetCurSel();   
  725.     
  726.     CString strInfo;
  727.     strInfo.LoadString(IDS_STATUS_TITLE);
  728.     
  729.     CString strText; 
  730.     
  731.     if (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL) == IDC_TOOLBAR)
  732.         strText.LoadString(IDS_STATUS_TOOLBAR);
  733.     else
  734.         m_ListboxAPI.GetText(nSelAPI,strText);
  735.        
  736.     strInfo += strText;
  737.     GetDlgItem(IDC_INFO_STATIC)->SetWindowText(strInfo);
  738.                                                            
  739.     switch (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL))
  740.     {                     
  741.         case IDC_BROWSER:                 
  742.         {
  743.             CStringArray staArray,*pstaArray = NULL;    
  744.             char szBuf[16];
  745.             
  746.             if (nSelAPI == WLAPI_RegisterProtocol)
  747.                 pstaArray = &m_staRegProtocol;
  748.             else if (nSelAPI == WLAPI_RegisterViewer)
  749.                 pstaArray = &m_staRegViewer;
  750.             else if (nSelAPI == WLAPI_RegisterURLEcho && m_staRegURLEcho)
  751.             {   
  752.                 CString strStatus;                     
  753.                 strStatus.LoadString(IDS_STAT_URLECHO);
  754.                 
  755.                 staArray.Add(strStatus);
  756.                 pstaArray = &staArray;                
  757.             }
  758.             else if (nSelAPI == WLAPI_RegisterWindowChange)
  759.             {
  760.                 for (int nIdx=0;nIdx < m_staRegWindowChange.GetSize();nIdx++)
  761.                     staArray.Add(CString(ltoa((long) m_staRegWindowChange[nIdx],szBuf,10)));
  762.                 pstaArray = &staArray;    
  763.             }
  764.                 
  765.             if (pstaArray != NULL)
  766.                 FillInfoListbox(*pstaArray);
  767.             break;
  768.         }
  769.         
  770.         case IDC_TOOLBAR:
  771.         {                           
  772.             CStringArray staArray;
  773.             char szID[16];            
  774.             
  775.             for (int nIdx=0;nIdx < m_staToolbar.GetSize();nIdx++)
  776.                 staArray.Add(CString(itoa((int) m_staToolbar[nIdx],szID,10)));
  777.             FillInfoListbox(staArray);
  778.             break;
  779.         }
  780.         
  781.         case IDC_HTML:    
  782.             break;
  783.         
  784.         case IDC_UTIL: 
  785.             break;
  786.     }    
  787. }
  788.  
  789. void CMainDlg::OnNotifyUpdateCmdUI(CCmdUI* pCmdUI)
  790. {                       
  791.     int nSelAPI = m_ListboxAPI.GetCurSel();
  792.     BOOL bEnable = TRUE;
  793.     
  794.     switch (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL))
  795.     {
  796.         case IDC_BROWSER:
  797.             if (bEnable = m_hBrowser != NULL)
  798.                 bEnable = nSelAPI == WLAPI_ShowFile ||
  799.                           nSelAPI == WLAPI_OpenURL ||
  800.                           nSelAPI == WLAPI_SaveURL ||
  801.                           nSelAPI == WLAPI_PostFormData ||
  802.                           nSelAPI == WLAPI_SaveFormData ||
  803.                           nSelAPI == WLAPI_RegisterProtocol ||
  804.                           nSelAPI == WLAPI_RegisterURLEcho ||
  805.                           nSelAPI == WLAPI_RegisterViewer ||
  806.                           nSelAPI == WLAPI_RegisterWindowChange;
  807.             break;
  808.         
  809.         case IDC_TOOLBAR:
  810.             bEnable = m_hToolbar != NULL;
  811.             break;
  812.         
  813.         case IDC_HTML:
  814.             if (bEnable = m_hParse != NULL)
  815.                 bEnable = nSelAPI == WLAPI_HtmlEnumParseTree ||
  816.                           nSelAPI == WLAPI_HtmlEnumFindText ||
  817.                           nSelAPI == WLAPI_HtmlEnumFindSpecial ||
  818.                           nSelAPI == WLAPI_HtmlEnumFindComment ||
  819.                           nSelAPI == WLAPI_HtmlEnumFindTagType ||
  820.                           nSelAPI == WLAPI_HtmlEnumFindTagName ||
  821.                           nSelAPI == WLAPI_HtmlEnumFindTagAttr;
  822.             break;
  823.         
  824.         case IDC_UTIL: 
  825.             bEnable = FALSE;
  826.             break;
  827.     }
  828.     pCmdUI->Enable(bEnable);
  829. }
  830.  
  831. void CMainDlg::OnStatusUpdateCmdUI(CCmdUI* pCmdUI)
  832. {   
  833.     int nSelAPI = m_ListboxAPI.GetCurSel();
  834.     BOOL bEnable = TRUE;
  835.     
  836.     switch (GetCheckedRadioButton(IDC_BROWSER,IDC_UTIL))
  837.     {
  838.         case IDC_BROWSER:
  839.             if (bEnable = m_hBrowser != NULL)
  840.                 bEnable = nSelAPI == WLAPI_RegisterProtocol ||
  841.                           nSelAPI == WLAPI_RegisterURLEcho ||
  842.                           nSelAPI == WLAPI_RegisterViewer ||
  843.                           nSelAPI == WLAPI_RegisterWindowChange;
  844.             break;
  845.         
  846.         case IDC_TOOLBAR:
  847.             bEnable = m_hToolbar != NULL;
  848.             break;
  849.         
  850.         case IDC_HTML:
  851.             bEnable = FALSE;
  852.             break;
  853.         
  854.         case IDC_UTIL: 
  855.             bEnable = FALSE;
  856.             break;
  857.     }
  858.     pCmdUI->Enable(bEnable);
  859. }
  860.  
  861. ///////////////////////////////////////////////////////////////////////////// 
  862. // Methods for each WEBLIB API.
  863.  
  864. void CMainDlg::ConnectBrowserAPI()
  865. {                            
  866.     BOOL bStart = TRUE,bSend = FALSE,bPost = TRUE;
  867.                     
  868.     if (ApiDlgConnectBrowser(&bStart,&bSend,&bPost))
  869.     {
  870.         WORD wOptions = (bStart ? WL_STARTBROWSER : 0) |
  871.                         (bSend  ? WL_SENDMESSAGE  : 0) |
  872.                         (bPost  ? WL_POSTMESSAGE  : 0);
  873.                                         
  874.         if ((m_hBrowser = WLConnectBrowser(wOptions)) == NULL)         
  875.             Error(IDS_ERR_WLAPI,"WLConnectBrowser"); 
  876.         else
  877.             ApiReturnValue("WLConnectBrowser");
  878.         OnBrowserAPI();
  879.     }
  880. }
  881.  
  882. void CMainDlg::DisconnectBrowserAPI()
  883. {  
  884.     BOOL bExit = TRUE;
  885.                  
  886.     if (ApiDlgDisconnectBrowser(&bExit))
  887.     {
  888.         m_nfyShowFile.RemoveAll();
  889.         m_nfyOpenURL.RemoveAll();
  890.         m_nfySaveURL.RemoveAll();
  891.         m_nfyPostFormData.RemoveAll();    
  892.         m_nfySaveFormData.RemoveAll();
  893.         m_nfyRegProtocol.RemoveAll();
  894.         m_nfyRegURLEcho.RemoveAll();
  895.         m_nfyRegViewer.RemoveAll();
  896.         m_nfyRegWindowChange.RemoveAll();
  897.     
  898.         if (WLDisconnectBrowser(m_hBrowser,bExit))                    
  899.         {   
  900.             ApiReturnValue("WLDisconnectBrowser");
  901.             m_hBrowser = NULL;
  902.             OnBrowserAPI();
  903.         }
  904.         else   
  905.             Error(IDS_ERR_WLAPI,"WLDisconnectBrowser"); 
  906.     }
  907. }
  908.         
  909. void CMainDlg::CreateToolbarAPI()
  910. {                            
  911.     char szMenu[64] = "";
  912.                 
  913.     if (ApiDlgCreateToolbar(szMenu,sizeof(szMenu)))
  914.     {
  915.         m_hToolbar = WLCreateToolbar(szMenu,m_hWnd,WM_WEBLIB_NOTIFY);
  916.         if (m_hToolbar == NULL)                                     
  917.             Error(IDS_ERR_WLAPI,"WLCreateToolbar"); 
  918.         else
  919.             ApiReturnValue("WLCreateToolbar");
  920.         OnToolbarAPI();
  921.     }
  922. }
  923.  
  924. void CMainDlg::DeleteToolbarAPI()
  925. {   
  926.     m_nfyToolbar.RemoveAll();
  927.     
  928.     if (WLDeleteToolbar(m_hToolbar))                                
  929.     {   
  930.         ApiReturnValue("WLDeleteToolbar");
  931.         m_hToolbar = NULL;
  932.         OnToolbarAPI();
  933.     }
  934.     else   
  935.         Error(IDS_ERR_WLAPI,"WLDeleteToolbar"); 
  936. }
  937.         
  938. void CMainDlg::HtmlParseAPI()
  939. {   
  940.     BOOL bAttr = FALSE,bClosing = FALSE;                         
  941.     char szFile[_MAX_PATH] = "",szBuf[MAX_HTMLBUF] = "";
  942.     char *pszBuf = szBuf; 
  943.     UINT cbBuf = sizeof(szBuf);
  944.                     
  945.     if (ApiDlgHtmlParse(szFile,sizeof(szFile),pszBuf,cbBuf,&bAttr,&bClosing))
  946.     { 
  947.         WORD wOptions = (bAttr ? WL_KEEPATTRIBUTETAG : 0) |
  948.                         (bClosing ? WL_KEEPCLOSINGTAG : 0);
  949.                                         
  950.         if (szFile[0])
  951.             m_hParse = WLHtmlParseFile(szFile,wOptions);            
  952.         else           
  953.             m_hParse = WLHtmlParseBuf(pszBuf,lstrlen(pszBuf),wOptions);
  954.                             
  955.         if (m_hParse == NULL) 
  956.             Error(IDS_ERR_WLAPI,szFile[0] ? "WLHtmlParseFile" : "WLHtmlParseBuf"); 
  957.         else 
  958.         {
  959.             ApiReturnValue(szFile[0] ? "WLHtmlParseFile" : "WLHtmlParseBuf");
  960.             m_hElement = WL_ROOTELEMENT;
  961.             m_hTagAttr = NULL;
  962.         }
  963.         OnHtmlAPI();
  964.     }
  965. }             
  966.  
  967. void CMainDlg::HtmlEndParseAPI()
  968.     m_nfyEnumParseTree.RemoveAll();
  969.     m_nfyEnumFindText.RemoveAll();
  970.     m_nfyEnumFindSpecial.RemoveAll();
  971.     m_nfyEnumFindComment.RemoveAll();
  972.     m_nfyEnumFindTagType.RemoveAll();
  973.     m_nfyEnumFindTagName.RemoveAll();
  974.     m_nfyEnumFindTagAttr.RemoveAll(); 
  975.     
  976.     if (WLHtmlEndParse(m_hParse))                                    
  977.     {   
  978.         ApiReturnValue("WLHtmlEndParse");
  979.         m_hParse = NULL;
  980.         m_hElement = NULL;
  981.         OnHtmlAPI();
  982.     }
  983.     else   
  984.         Error(IDS_ERR_WLAPI,"WLHtmlEndParse"); 
  985. }
  986.         
  987. void CMainDlg::AccessFormDataAPI()
  988. {   
  989.     ASSERT(m_hFormData != NULL);
  990.     UINT nDataLength = WLGetFormDataLength(m_hFormData);            
  991.             
  992.     if (nDataLength == 0)
  993.         Error(IDS_ERR_WLAPI,"WLGetFormDataLength"); 
  994.     else 
  995.     {   
  996.         nDataLength += sizeof('\0');
  997.         LPSTR lpszFormData = (LPSTR) GlobalAllocPtr(GHND,nDataLength);
  998.                 
  999.         if (WLAccessFormData(m_hFormData,lpszFormData,nDataLength))
  1000.         {                                                           
  1001.             ApiDlgAccessFormData(lpszFormData);
  1002.             ApiReturnValue("WLAccessFormData");
  1003.         }
  1004.         else
  1005.             Error(IDS_ERR_WLAPI,"WLAccessFormData"); 
  1006.                 
  1007.         GlobalFreePtr(lpszFormData);
  1008.         m_hFormData = NULL;
  1009.         OnUtilAPI();
  1010.     }
  1011. }
  1012.  
  1013. void CMainDlg::GetWindowInfoAPI()
  1014. {   
  1015.     DWORD dwWindow = 0;
  1016.     char szURL[128] = "",szTitle[128] = "";
  1017.     
  1018.     if (ApiDlgGetWindowInfo(&dwWindow))                             
  1019.         if (WLGetWindowInfo(m_hBrowser,dwWindow,szURL,sizeof(szURL),szTitle,sizeof(szTitle)))
  1020.             ApiReturnValue("WLGetWindowInfo",szURL,szTitle);
  1021.         else
  1022.             Error(IDS_ERR_WLAPI,"WLGetWindowInfo"); 
  1023. }
  1024.  
  1025. void CMainDlg::ListWindowsAPI()
  1026. {
  1027.     BOOL bFirst = FALSE;  
  1028.                     
  1029.     if (ApiDlgListWindows(&bFirst))
  1030.     {
  1031.         DWORD dwWindow = WLListWindows(m_hBrowser,bFirst ? WL_FIRSTWINDOW : WL_NEXTWINDOW);
  1032.         char szWindow[16];                                             
  1033.         
  1034.         if (dwWindow == 0)
  1035.             Error(IDS_ERR_WLAPI,"WLListWindows"); 
  1036.         else                                       
  1037.             ApiReturnValue("WLListWindows",_ltoa((long) dwWindow,szWindow,10));
  1038.     }
  1039. }
  1040.  
  1041. void CMainDlg::ActivateWindowAPI()
  1042. {   
  1043.     DWORD dwWindow = 0;
  1044.     char szWindow[16];    
  1045.     
  1046.     if (ApiDlgActivateWindow(&dwWindow))
  1047.         if ((dwWindow = WLActivateWindow(m_hBrowser,dwWindow)))        
  1048.             ApiReturnValue("WLActivateWindow",_ltoa((long) dwWindow,szWindow,10));
  1049.         else
  1050.             Error(IDS_ERR_WLAPI,"WLActivateWindow"); 
  1051. }
  1052.  
  1053. void CMainDlg::CloseWindowAPI()
  1054. {   
  1055.     DWORD dwWindow = 0;
  1056.     
  1057.     if (ApiDlgCloseWindow(&dwWindow))
  1058.         if (WLCloseWindow(m_hBrowser,dwWindow))                        
  1059.             ApiReturnValue("WLCloseWindow");
  1060.         else
  1061.             Error(IDS_ERR_WLAPI,"WLCloseWindow"); 
  1062. }
  1063.  
  1064. void CMainDlg::SetWindowPosAPI()
  1065. {   
  1066.     DWORD dwWindow = 0,dwX = 0,dwY = 0,dwWidth = 0,dwHeight = 0;
  1067.     
  1068.     if (ApiDlgSetWindowPos(&dwWindow,&dwX,&dwY,&dwWidth,&dwHeight))
  1069.         if (WLSetWindowPos(m_hBrowser,dwWindow,dwX,dwY,dwWidth,dwHeight))    
  1070.             ApiReturnValue("WLSetWindowPos");                        
  1071.         else
  1072.             Error(IDS_ERR_WLAPI,"WLSetWindowPos"); 
  1073. }
  1074.  
  1075. void CMainDlg::ShowWindowAPI()
  1076. {   
  1077.     DWORD dwWindow = 0;
  1078.     UINT nShow = WL_NORMAL;
  1079.     
  1080.     if (ApiDlgShowWindow(&dwWindow,&nShow))
  1081.         if (WLShowWindow(m_hBrowser,dwWindow,nShow))                
  1082.             ApiReturnValue("WLShowWindow");
  1083.         else
  1084.             Error(IDS_ERR_WLAPI,"WLShowWindow"); 
  1085. }
  1086.  
  1087. void CMainDlg::ShowFileAPI()
  1088. {         
  1089.     BOOL bNotify = 0;
  1090.     DWORD dwWindow = 0;
  1091.     char szFile[128] = "",szMIME[64] = "",szURL[128] = "";
  1092.     
  1093.     if (ApiDlgShowFile(szFile,sizeof(szFile),szMIME,sizeof(szMIME),&bNotify,szURL,
  1094.         sizeof(szURL),&dwWindow))
  1095.     {
  1096.         (m_pnfyArray = &m_nfyShowFile)->RemoveAll();
  1097.      
  1098.         DWORD dwTrx = WLShowFile(m_hBrowser,szFile,szMIME,dwWindow,szURL,
  1099.             bNotify ? m_hWnd : WL_NONOTIFY,bNotify ? WM_WEBLIB_NOTIFY : 0);
  1100.         char szTrx[16];                                            
  1101.             
  1102.         if (dwTrx == 0)
  1103.             Error(IDS_ERR_WLAPI,"WLShowFile"); 
  1104.         else
  1105.             ApiReturnValue("WLShowFile",_ltoa((long) dwTrx,szTrx,10));
  1106.     }
  1107. }
  1108.  
  1109. void CMainDlg::OpenURLAPI()
  1110. {   
  1111.     BOOL bBackground = FALSE,bNoDocCache = FALSE,bNoImageCache = FALSE,bNotify = TRUE;
  1112.     DWORD dwWindow = 0;
  1113.     char szURL[128] = "";
  1114.  
  1115.     if (ApiDlgOpenURL(&bBackground,&bNoDocCache,&bNoImageCache,&bNotify,szURL,
  1116.         sizeof(szURL),&dwWindow))
  1117.     {    
  1118.         (m_pnfyArray = &m_nfyOpenURL)->RemoveAll();
  1119.     
  1120.         WORD wOptions = (bBackground ? WL_BACKGROUNDMODE : 0) |       
  1121.                         (bNoDocCache ? WL_NODOCUMENTCACHE : 0) |  
  1122.                         (bNoImageCache ? WL_NOIMAGECACHE : 0);
  1123.         char szTrx[16];
  1124.                         
  1125.         DWORD dwTrx = WLOpenURL(m_hBrowser,szURL,dwWindow,wOptions,        
  1126.             bNotify ? m_hWnd : WL_NONOTIFY,bNotify ? WM_WEBLIB_NOTIFY : 0);
  1127.             
  1128.         if (dwTrx == 0)
  1129.             Error(IDS_ERR_WLAPI,"WLOpenURL"); 
  1130.         else
  1131.             ApiReturnValue("WLOpenURL",_ltoa((long) dwTrx,szTrx,10));
  1132.     }
  1133. }
  1134.  
  1135. void CMainDlg::SaveURLAPI()
  1136. {       
  1137.     BOOL bBackground = FALSE,bNoDocCache = FALSE,bNoImageCache = FALSE,bNotify = TRUE;
  1138.     DWORD dwWindow = 0;
  1139.     char szURL[128] = "",szFile[128] = "";
  1140.  
  1141.     if (ApiDlgSaveURL(&bBackground,&bNoDocCache,&bNoImageCache,&bNotify,szURL,
  1142.         sizeof(szURL),szFile,sizeof(szFile),&dwWindow))
  1143.     {
  1144.         (m_pnfyArray = &m_nfySaveURL)->RemoveAll();
  1145.         
  1146.         WORD wOptions = (bBackground ? WL_BACKGROUNDMODE : 0) |       
  1147.                         (bNoDocCache ? WL_NODOCUMENTCACHE : 0) |  
  1148.                         (bNoImageCache ? WL_NOIMAGECACHE : 0);
  1149.         char szTrx[16];
  1150.                         
  1151.         DWORD dwTrx = WLSaveURL(m_hBrowser,szURL,szFile,dwWindow,wOptions,    
  1152.             bNotify ? m_hWnd : WL_NONOTIFY,bNotify ? WM_WEBLIB_NOTIFY : 0);
  1153.             
  1154.         if (dwTrx == 0)
  1155.             Error(IDS_ERR_WLAPI,"WLSaveURL"); 
  1156.         else
  1157.             ApiReturnValue("WLSaveURL",_ltoa((long) dwTrx,szTrx,10));
  1158.     }
  1159. }
  1160.  
  1161. void CMainDlg::PostFormDataAPI()
  1162. {   
  1163.     BOOL bNotify = TRUE;
  1164.     DWORD dwWindow = 0;
  1165.     char szFormData[MAX_FORMDATA] = "",szMIME[64] = "",szURL[128] = "";
  1166.  
  1167.     if (ApiDlgPostFormData(szFormData,sizeof(szFormData),szMIME,sizeof(szMIME),
  1168.         &bNotify,szURL,sizeof(szURL),&dwWindow))
  1169.     {
  1170.         (m_pnfyArray = &m_nfyPostFormData)->RemoveAll();       
  1171.         
  1172.         DWORD dwTrx = WLPostFormData(m_hBrowser,szURL,dwWindow,szFormData,    
  1173.             szMIME,bNotify ? m_hWnd : WL_NONOTIFY,bNotify ? WM_WEBLIB_NOTIFY : 0);
  1174.         char szTrx[16];
  1175.             
  1176.         if (dwTrx == 0)
  1177.             Error(IDS_ERR_WLAPI,"WLPostFormData"); 
  1178.         else
  1179.             ApiReturnValue("WLPostFormData",_ltoa((long) dwTrx,szTrx,10));
  1180.     }
  1181. }
  1182.  
  1183. void CMainDlg::SaveFormDataAPI()
  1184. {
  1185.     BOOL bNotify = TRUE;
  1186.     DWORD dwWindow = 0;
  1187.     char szFile[128] = "",szFormData[MAX_FORMDATA] = "",szMIME[64] = "",szURL[128] = "";
  1188.  
  1189.     if (ApiDlgSaveFormData(szFile,sizeof(szFile),szFormData,sizeof(szFormData),
  1190.         szMIME,sizeof(szMIME),&bNotify,szURL,sizeof(szURL),&dwWindow))
  1191.     {
  1192.         (m_pnfyArray = &m_nfySaveFormData)->RemoveAll();
  1193.     
  1194.         DWORD dwTrx = WLSaveFormData(m_hBrowser,szURL,szFile,dwWindow,    
  1195.             szFormData,szMIME,bNotify ? m_hWnd : WL_NONOTIFY,
  1196.                 bNotify ? WM_WEBLIB_NOTIFY : 0);
  1197.         char szTrx[16];
  1198.             
  1199.         if (dwTrx == 0)
  1200.             Error(IDS_ERR_WLAPI,"WLSaveFormData"); 
  1201.         else
  1202.             ApiReturnValue("WLSaveFormData",_ltoa((long) dwTrx,szTrx,10));
  1203.     }
  1204. }
  1205.  
  1206. void CMainDlg::RegisterProtocolAPI()
  1207. {
  1208.     char szProtocol[64] = "";
  1209.     
  1210.     if (ApiDlgRegisterProtocol(szProtocol,sizeof(szProtocol)))
  1211.     {
  1212.         if (WLRegisterProtocol(m_hBrowser,szProtocol,m_hWnd,WM_WEBLIB_NOTIFY))
  1213.         {
  1214.             m_staRegProtocol.Add(CString(szProtocol));
  1215.             ApiReturnValue("WLRegisterProtocol");
  1216.         }
  1217.         else
  1218.             Error(IDS_ERR_WLAPI,"WLRegisterProtocol"); 
  1219.     }
  1220. }
  1221.  
  1222. void CMainDlg::UnregisterProtocolAPI()
  1223. {
  1224.     char szProtocol[64] = "";
  1225.     
  1226.     if (ApiDlgUnregisterProtocol(szProtocol,sizeof(szProtocol)))
  1227.     {       
  1228.         RemoveFromStatusArray(m_staRegProtocol,CString(szProtocol));
  1229.         if (m_staRegProtocol.GetSize() == 0)
  1230.             m_nfyRegProtocol.RemoveAll();
  1231.         
  1232.         if (WLUnregisterProtocol(m_hBrowser,szProtocol,m_hWnd))
  1233.             ApiReturnValue("WLUnregisterProtocol");
  1234.         else
  1235.             Error(IDS_ERR_WLAPI,"WLUnregisterProtocol"); 
  1236.     }
  1237. }
  1238.  
  1239. void CMainDlg::RegisterURLEchoAPI()
  1240. {
  1241.     if (WLRegisterURLEcho(m_hBrowser,m_hWnd,WM_WEBLIB_NOTIFY))
  1242.     {
  1243.         m_staRegURLEcho = TRUE;
  1244.         ApiReturnValue("WLRegisterURLEcho");
  1245.     }
  1246.     else
  1247.         Error(IDS_ERR_WLAPI,"WLRegisterURLEcho"); 
  1248. }
  1249.  
  1250. void CMainDlg::UnregisterURLEchoAPI()
  1251. {       
  1252.     m_staRegURLEcho = FALSE;
  1253.     m_nfyRegURLEcho.RemoveAll();
  1254.     
  1255.     if (WLUnregisterURLEcho(m_hBrowser,m_hWnd))
  1256.         ApiReturnValue("WLUnregisterURLEcho");
  1257.     else
  1258.         Error(IDS_ERR_WLAPI,"WLUnregisterURLEcho"); 
  1259. }
  1260.  
  1261. void CMainDlg::RegisterViewerAPI()
  1262. {   
  1263.     BOOL bQueryViewer = FALSE,bShellExec = FALSE,bViewDocFile = TRUE;
  1264.     char szMIME[64] = "";
  1265.     
  1266.     if (ApiDlgRegisterViewer(szMIME,sizeof(szMIME),&bQueryViewer,&bShellExec,&bViewDocFile))
  1267.     {       
  1268.         WORD wOptions = (bQueryViewer ? WL_QUERYVIEWER : 0) |
  1269.                         (bShellExec ? WL_SHELLEXECUTE : 0) |
  1270.                         (bViewDocFile ? WL_VIEWDOCFILE : 0);
  1271.         
  1272.         if (WLRegisterViewer(m_hBrowser,szMIME,wOptions,m_hWnd,WM_WEBLIB_NOTIFY))
  1273.         {
  1274.             m_staRegViewer.Add(CString(szMIME));
  1275.             ApiReturnValue("WLRegisterViewer");
  1276.         }
  1277.         else
  1278.             Error(IDS_ERR_WLAPI,"WLRegisterViewer"); 
  1279.     }
  1280. }
  1281.  
  1282. void CMainDlg::UnregisterViewerAPI()
  1283. {   
  1284.     char szMIME[64] = "";
  1285.     
  1286.     if (ApiDlgUnregisterViewer(szMIME,sizeof(szMIME)))
  1287.     {               
  1288.         RemoveFromStatusArray(m_staRegViewer,CString(szMIME));
  1289.         if (m_staRegViewer.GetSize() == 0)
  1290.             m_nfyRegViewer.RemoveAll();
  1291.             
  1292.         if (WLUnregisterViewer(m_hBrowser,szMIME,m_hWnd))
  1293.             ApiReturnValue("WLUnregisterViewer");
  1294.         else
  1295.             Error(IDS_ERR_WLAPI,"WLUnregisterViewer"); 
  1296.     }
  1297. }
  1298.  
  1299. void CMainDlg::RegisterWindowChangeAPI()
  1300. {                                               
  1301.     DWORD dwWindow = 0;
  1302.     
  1303.     if (ApiDlgRegisterWindowChange(&dwWindow))
  1304.         if (WLRegisterWindowChange(m_hBrowser,dwWindow,m_hWnd,WM_WEBLIB_NOTIFY))
  1305.         {
  1306.             m_staRegWindowChange.Add(dwWindow);
  1307.             ApiReturnValue("WLRegisterWindowChange");
  1308.         }
  1309.         else
  1310.             Error(IDS_ERR_WLAPI,"WLRegisterWindowChange"); 
  1311. }
  1312.  
  1313. void CMainDlg::UnregisterWindowChangeAPI()
  1314. {   
  1315.     DWORD dwWindow = 0;
  1316.     
  1317.     if (ApiDlgUnregisterWindowChange(&dwWindow))
  1318.     { 
  1319.         for (int nIdx=0;nIdx < m_staRegWindowChange.GetSize();nIdx++)
  1320.             if (dwWindow == m_staRegWindowChange[nIdx])
  1321.             {
  1322.                 m_staRegWindowChange.RemoveAt(nIdx);
  1323.                 break;
  1324.             }
  1325.         if (m_staRegWindowChange.GetSize() == 0)
  1326.             m_nfyRegWindowChange.RemoveAll();
  1327.             
  1328.         if (WLUnregisterWindowChange(m_hBrowser,dwWindow,m_hWnd))
  1329.             ApiReturnValue("WLUnregisterWindowChange");
  1330.         else
  1331.             Error(IDS_ERR_WLAPI,"WLUnregisterWindowChange"); 
  1332.     }
  1333. }
  1334.  
  1335. void CMainDlg::ParseAnchorAPI()
  1336. {
  1337.     char szAbsURL[128] = "",szRelURL[128] = "";
  1338.  
  1339.     if (ApiDlgParseAnchor(szAbsURL,sizeof(szAbsURL),szRelURL,sizeof(szRelURL)))
  1340.     {
  1341.         const char *pszURL = WLParseAnchor(m_hBrowser,szAbsURL,szRelURL);
  1342.         
  1343.         if (pszURL == NULL)
  1344.             Error(IDS_ERR_WLAPI,"WLParseAnchor"); 
  1345.         else
  1346.             ApiReturnValue("WLParseAnchor",pszURL);
  1347.     }
  1348. }
  1349.  
  1350. void CMainDlg::GetVersionAPI()
  1351. {   
  1352.     UINT nMajor = 0,nMinor = 0;
  1353.     
  1354.     if (ApiDlgGetVersion(&nMajor,&nMinor))
  1355.     {
  1356.         DWORD dwVersion = WLGetVersion(m_hBrowser,(WORD) nMajor,(WORD) nMinor);
  1357.         char szVersion[16];
  1358.         
  1359.         wsprintf(szVersion,"%d.%d",(int) HIWORD(dwVersion),(int) LOWORD(dwVersion));
  1360.         ApiReturnValue("WLGetVersion",szVersion);
  1361.     }
  1362. }
  1363.  
  1364. void CMainDlg::QueryURLFileAPI()
  1365. {   
  1366.     char szFile[128] = "";
  1367.     
  1368.     if (ApiDlgQueryFile(szFile,sizeof(szFile)))
  1369.     {
  1370.         const char *pszURL = WLQueryURLFile(m_hBrowser,szFile);
  1371.         
  1372.         if (pszURL == NULL)
  1373.             Error(IDS_ERR_WLAPI,"WLQueryURLFile"); 
  1374.         else
  1375.             ApiReturnValue("WLQueryURLFile",pszURL);
  1376.     }
  1377. }
  1378.  
  1379. void CMainDlg::SetNotifyMethodAPI()
  1380. {                                      
  1381.     BOOL bPost = TRUE;
  1382.     
  1383.     if (ApiDlgSetNotifyMethod(&bPost))
  1384.         if (WLSetNotifyMethod(m_hBrowser,bPost ? WL_POSTMESSAGE : WL_SENDMESSAGE))
  1385.             ApiReturnValue("WLSetNotifyMethod");
  1386.         else
  1387.             Error(IDS_ERR_WLAPI,"WLSetNotifyMethod"); 
  1388. }
  1389.  
  1390. void CMainDlg::IsToolbarActiveAPI()
  1391. {                       
  1392.     const char *pszBool = WLIsToolbarActive(m_hToolbar) ? "TRUE" : "FALSE";
  1393.     
  1394.     ApiReturnValue("WLIsToolbarActive",pszBool);    // no-op if only one toolbar
  1395. }
  1396.  
  1397. void CMainDlg::SetActiveToolbarAPI()
  1398. {
  1399.     if (WLSetActiveToolbar(m_hToolbar))
  1400.         ApiReturnValue("WLSetActiveToolbar");
  1401.     else
  1402.         Error(IDS_ERR_WLAPI,"WLSetActiveToolbar"); 
  1403. }
  1404.  
  1405. void CMainDlg::AddToolbarButtonAPI()
  1406. {       
  1407.     UINT nID = 100;
  1408.     int nIdx = 0,nBitmapStyle = 1,nBitmapMask = 0xF;
  1409.     char szText[128] = "";
  1410.         
  1411.     if (ApiDlgAddToolbarButton(&nID,&nIdx,szText,sizeof(szText),&nBitmapStyle,&nBitmapMask))
  1412.     {
  1413.         LPCSTR lpszBitmap = NULL,lpszBitmapSel = NULL;
  1414.         LPCSTR lpszBitmapFocus = NULL,lpszBitmapDisabled = NULL;
  1415.         
  1416.         if (_ISUP(nBitmapMask))
  1417.             lpszBitmap = MAKEINTRESOURCE(nBitmapStyle + APIDLG_BITMAP_UP);
  1418.         if (_ISSEL(nBitmapMask))
  1419.             lpszBitmapSel = MAKEINTRESOURCE(nBitmapStyle + APIDLG_BITMAP_SEL);
  1420.         if (_ISFOCUS(nBitmapMask))
  1421.             lpszBitmapFocus = MAKEINTRESOURCE(nBitmapStyle + APIDLG_BITMAP_FOCUS);
  1422.         if (_ISDISABLED(nBitmapMask))
  1423.             lpszBitmapDisabled = MAKEINTRESOURCE(nBitmapStyle + APIDLG_BITMAP_DISABLED);
  1424.     
  1425.         if (WLAddToolbarButton(m_hToolbar,nID,nIdx,szText,GetApiDlgDLLInstance(),
  1426.             lpszBitmap,lpszBitmapSel,lpszBitmapFocus,lpszBitmapDisabled))
  1427.         {
  1428.             m_staToolbar.Add(nID);
  1429.             ApiReturnValue("WLAddToolbarButton");
  1430.         }
  1431.         else
  1432.             Error(IDS_ERR_WLAPI,"WLAddToolbarButton"); 
  1433.     }
  1434. }
  1435.  
  1436. void CMainDlg::RemoveToolbarButtonAPI()
  1437. {   
  1438.     UINT nID = 100;
  1439.     
  1440.     if (ApiDlgRemoveToolbarButton(&nID))
  1441.     {
  1442.         for (int nIdx=0;nIdx < m_staToolbar.GetSize();nIdx++)
  1443.             if (nID == m_staToolbar[nIdx])
  1444.             {
  1445.                 m_staToolbar.RemoveAt(nIdx);
  1446.                 break;
  1447.             }
  1448.         if (m_staToolbar.GetSize() == 0)
  1449.             m_nfyToolbar.RemoveAll();
  1450.             
  1451.         if (WLRemoveToolbarButton(m_hToolbar,nID))
  1452.             ApiReturnValue("WLRemoveToolbarButton");
  1453.         else
  1454.             Error(IDS_ERR_WLAPI,"WLRemoveToolbarButton"); 
  1455.     }
  1456. }
  1457.  
  1458. void CMainDlg::IsToolbarButtonVisibleAPI()
  1459. {   
  1460.     UINT nID = 100;
  1461.     
  1462.     if (ApiDlgIsToolbarButtonVisible(&nID))                          
  1463.     {
  1464.         const char *pszBool = WLIsToolbarButtonVisible(m_hToolbar,nID) ? "TRUE" : "FALSE";
  1465.         ApiReturnValue("WLIsToolbarButtonVisible",pszBool);
  1466.     }
  1467. }
  1468.  
  1469. void CMainDlg::ShowToolbarButtonAPI()
  1470. {   
  1471.     UINT nID = 100;
  1472.     BOOL bShow = TRUE;
  1473.     
  1474.     if (ApiDlgShowToolbarButton(&nID,&bShow))
  1475.         if (WLShowToolbarButton(m_hToolbar,nID,bShow))
  1476.             ApiReturnValue("WLShowToolbarButton");
  1477.         else
  1478.             Error(IDS_ERR_WLAPI,"WLShowToolbarButton"); 
  1479. }
  1480.  
  1481. void CMainDlg::EnableToolbarButtonAPI()
  1482. {   
  1483.     UINT nID = 100;
  1484.     BOOL bEnable = TRUE;
  1485.     
  1486.     if (ApiDlgEnableToolbarButton(&nID,&bEnable))
  1487.         if (WLEnableToolbarButton(m_hToolbar,nID,bEnable))
  1488.             ApiReturnValue("WLEnableToolbarButton");
  1489.         else
  1490.             Error(IDS_ERR_WLAPI,"WLEnableToolbarButton"); 
  1491. }
  1492.  
  1493. void CMainDlg::IsToolbarButtonEnabledAPI()
  1494. {   
  1495.     UINT nID = 100;
  1496.     
  1497.     if (ApiDlgIsToolbarButtonEnabled(&nID))
  1498.     {
  1499.         const char *pszBool = WLIsToolbarButtonEnabled(m_hToolbar,nID) ? "TRUE" : "FALSE";
  1500.         ApiReturnValue("WLIsToolbarButtonEnabled",pszBool);
  1501.     }
  1502. }
  1503.  
  1504. void CMainDlg::GetToolbarTextAPI()
  1505. {   
  1506.     UINT nID = 100;
  1507.     
  1508.     if (ApiDlgGetToolbarText(&nID))
  1509.     {
  1510.         const char *pszText = WLGetToolbarText(m_hToolbar,nID == 0 ? WL_TOOLBARTEXT : nID);
  1511.         
  1512.         if (pszText == NULL)
  1513.             Error(IDS_ERR_WLAPI,"WLGetToolbarText"); 
  1514.         else
  1515.             ApiReturnValue("WLGetToolbarText",pszText);
  1516.     }
  1517. }
  1518.  
  1519. void CMainDlg::SetToolbarTextAPI()
  1520. {   
  1521.     UINT nID = 100;                      
  1522.     char szText[128] = "";
  1523.     
  1524.     if (ApiDlgSetToolbarText(&nID,szText,sizeof(szText)))
  1525.         if (WLSetToolbarText(m_hToolbar,nID == 0 ? WL_TOOLBARTEXT : nID,szText))
  1526.             ApiReturnValue("WLSetToolbarText",szText);
  1527.         else
  1528.             Error(IDS_ERR_WLAPI,"WLSetToolbarText"); 
  1529. }
  1530.  
  1531. void CMainDlg::GetToolbarFontAPI()
  1532. {                         
  1533.     BOOL bToolbar = TRUE;
  1534.     
  1535.     if (ApiDlgGetToolbarFont(&bToolbar))
  1536.     {
  1537.         HFONT hFont = WLGetToolbarFont(m_hToolbar,bToolbar ? WL_TOOLBARFONT : WL_BUTTONFONT);
  1538.         
  1539.         if (hFont == NULL)
  1540.             Error(IDS_ERR_WLAPI,"WLGetToolbarFont"); 
  1541.         else
  1542.         {   
  1543.             LOGFONT LogFont;
  1544.             ::GetObject(hFont,sizeof(LogFont),&LogFont);
  1545.             
  1546.             char szHeight[16];
  1547.             (void) _itoa((int) LogFont.lfHeight,szHeight,10);
  1548.             
  1549.             ApiReturnValue("WLGetToolbarFont",LogFont.lfFaceName,szHeight);
  1550.         }
  1551.     }
  1552. }
  1553.  
  1554. void CMainDlg::SetToolbarFontAPI()
  1555. {   
  1556.     BOOL bToolbar = TRUE;
  1557.     int nPointSize = 12; 
  1558.     char szFont[64] = "";
  1559.     
  1560.     if (ApiDlgSetToolbarFont(szFont,sizeof(szFont),&nPointSize,&bToolbar))
  1561.     {
  1562.         if (m_hFont != NULL)
  1563.         {
  1564.             ::DeleteObject(m_hFont);
  1565.             m_hFont = NULL;
  1566.         }
  1567.             
  1568.         // Get logical horizontal pixels per inch from display device.
  1569.             
  1570.         CDC *pDC = GetDC();
  1571.         ASSERT(pDC != NULL);
  1572.             
  1573.         int nLogPixelsX = pDC->GetDeviceCaps(LOGPIXELSX);        
  1574.         ReleaseDC(pDC);  
  1575.         
  1576.         // Create logical font based on user's preferences.
  1577.     
  1578.         LOGFONT Logfont;
  1579.             
  1580.         memset(&Logfont,'\0',sizeof(Logfont));
  1581.         Logfont.lfCharSet = ANSI_CHARSET;
  1582.         Logfont.lfQuality = PROOF_QUALITY;
  1583.         Logfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;        
  1584.         Logfont.lfWeight = FW_NORMAL;
  1585.         Logfont.lfHeight = -((nLogPixelsX * nPointSize) / 72);
  1586.         lstrcpyn(Logfont.lfFaceName,szFont,LF_FACESIZE);
  1587.             
  1588.         if ((m_hFont = ::CreateFontIndirect(&Logfont)) == NULL)
  1589.             Error(IDS_ERR_WINAPI,"CreateFontIndirect"); 
  1590.         else
  1591.             if (WLSetToolbarFont(m_hToolbar,bToolbar ? WL_TOOLBARFONT : WL_BUTTONFONT,m_hFont))
  1592.                 ApiReturnValue("WLSetToolbarFont");
  1593.             else
  1594.                 Error(IDS_ERR_WLAPI,"WLSetToolbarFont"); 
  1595.     }
  1596. }
  1597.  
  1598. void CMainDlg::GetToolbarBkgndAPI()
  1599. {
  1600.     COLORREF crBkgnd = WLGetToolbarBkgnd(m_hToolbar); 
  1601.     RGBQUAD rgbQuad;
  1602.     char szBuf[64];
  1603.     
  1604.     memcpy(&rgbQuad,&crBkgnd,sizeof(crBkgnd));
  1605.     wsprintf(szBuf,"RGB(%d,%d,%d)",rgbQuad.rgbBlue,rgbQuad.rgbGreen,rgbQuad.rgbRed);
  1606.     ApiReturnValue("WLGetToolbarBkgnd",szBuf);
  1607. }
  1608.  
  1609. void CMainDlg::SetToolbarBkgndAPI()
  1610. {
  1611.     int nRed = 0,nGreen = 0,nBlue = 0;
  1612.  
  1613.     if (ApiDlgSetToolbarBkgnd(&nRed,&nGreen,&nBlue))
  1614.         if (WLSetToolbarBkgnd(m_hToolbar,RGB(nRed,nGreen,nBlue)))
  1615.             ApiReturnValue("WLSetToolbarBkgnd");
  1616.         else
  1617.             Error(IDS_ERR_WLAPI,"WLSetToolbarBkgnd"); 
  1618. }
  1619.  
  1620. void CMainDlg::GetToolbarTextColorAPI()
  1621. {   
  1622.     BOOL bToolbar = TRUE;
  1623.     
  1624.     if (ApiDlgGetToolbarTextColor(&bToolbar))
  1625.     {
  1626.         COLORREF crBkgnd = WLGetToolbarTextColor(m_hToolbar,
  1627.             bToolbar ? WL_TOOLBARTEXTCOLOR : WL_BUTTONTEXTCOLOR);
  1628.         RGBQUAD rgbQuad;
  1629.         char szBuf[64];
  1630.         
  1631.         memcpy(&rgbQuad,&crBkgnd,sizeof(crBkgnd));
  1632.         wsprintf(szBuf,"RGB(%d,%d,%d)",rgbQuad.rgbBlue,rgbQuad.rgbGreen,rgbQuad.rgbRed);
  1633.         ApiReturnValue("WLGetToolbarTextColor",szBuf);
  1634.     }
  1635. }
  1636.  
  1637. void CMainDlg::SetToolbarTextColorAPI()
  1638. {   
  1639.     BOOL bToolbar = TRUE;
  1640.     int nRed = 0,nGreen = 0,nBlue = 0;
  1641.     
  1642.     if (ApiDlgSetToolbarTextColor(&nRed,&nGreen,&nBlue,&bToolbar)) 
  1643.         if (WLSetToolbarTextColor(m_hToolbar,
  1644.             bToolbar ? WL_TOOLBARTEXTCOLOR : WL_BUTTONTEXTCOLOR,
  1645.             RGB(nRed,nGreen,nBlue)))
  1646.             ApiReturnValue("WLSetToolbarTextColor");
  1647.         else
  1648.             Error(IDS_ERR_WLAPI,"WLSetToolbarTextColor"); 
  1649. }
  1650.  
  1651. void CMainDlg::HtmlEnumParseTreeAPI()
  1652. {
  1653.     m_nfyEnumParseTree.RemoveAll();
  1654.     
  1655.     if (WLHtmlEnumParseTree(m_hParse,m_hWnd,WM_WEBLIB_ENUMPARSETREE))
  1656.         ApiReturnValue("WLHtmlEnumParseTree");
  1657.     else
  1658.         Error(IDS_ERR_WLAPI,"WLHtmlEnumParseTree"); 
  1659. }
  1660.  
  1661. void CMainDlg::HtmlGetChildAPI()
  1662. {   
  1663.     HELEMENT hElement = WLHtmlGetChild(m_hParse,m_hElement);
  1664.     
  1665.     if (hElement == NULL)                               
  1666.         Error(IDS_ERR_WLAPI,"WLHtmlGetChild"); 
  1667.     else
  1668.     {
  1669.         ApiReturnValue("WLHtmlGetChild");
  1670.         m_hElement = hElement;
  1671.         m_hTagAttr = NULL;
  1672.     }
  1673. }
  1674.  
  1675. void CMainDlg::HtmlGetParentAPI()
  1676. {   
  1677.     HELEMENT hElement = WLHtmlGetParent(m_hParse,m_hElement);
  1678.     
  1679.     if (hElement == NULL)                               
  1680.         Error(IDS_ERR_WLAPI,"WLHtmlGetParent"); 
  1681.     else
  1682.     {
  1683.         ApiReturnValue("WLHtmlGetParent");
  1684.         m_hElement = hElement;
  1685.         m_hTagAttr = NULL;
  1686.     }
  1687. }
  1688.  
  1689. void CMainDlg::HtmlGetSiblingAPI()
  1690. {
  1691.     UINT nRel = WL_FIRSTELEM;
  1692.     
  1693.     if (ApiDlgHtmlGetSibling(&nRel))
  1694.     {
  1695.         HELEMENT hElement = WLHtmlGetSibling(m_hParse,m_hElement,nRel);
  1696.         
  1697.         if (hElement == NULL)                               
  1698.             Error(IDS_ERR_WLAPI,"WLHtmlGetSibling"); 
  1699.         else
  1700.         {
  1701.             ApiReturnValue("WLHtmlGetSibling");
  1702.             m_hElement = hElement;
  1703.             m_hTagAttr = NULL;
  1704.         }
  1705.     }
  1706. }
  1707.  
  1708. void CMainDlg::HtmlGetElementTypeAPI()
  1709. {       
  1710.     const char *pszType = "?";
  1711.     
  1712.     switch (WLHtmlGetElementType(m_hParse,m_hElement))
  1713.     {
  1714.         case WL_ROOT:
  1715.             pszType = "ROOT";
  1716.             break;
  1717.             
  1718.         case WL_TAG:
  1719.             pszType = "TAG";
  1720.             break;
  1721.             
  1722.         case WL_SPECIALCHAR:
  1723.             pszType = "SPECIAL-CHAR";
  1724.             break;
  1725.             
  1726.         case WL_COMMENT:
  1727.             pszType = "COMMENT";
  1728.             break;
  1729.             
  1730.         case WL_TEXT:
  1731.             pszType = "TEXT";
  1732.             break;
  1733.     }       
  1734.     ApiReturnValue("WLHtmlGetElementType",pszType);
  1735. }
  1736.  
  1737. void CMainDlg::HtmlGetElementTextAPI()
  1738. {
  1739.     const char *pszText = WLHtmlGetElementText(m_hParse,m_hElement);
  1740.     
  1741.     ApiReturnValue("WLHtmlGetElementText",pszText == NULL ? "" : pszText);
  1742. }
  1743.  
  1744. void CMainDlg::HtmlGetTextAttrAPI()
  1745. {   
  1746.     if (WLHtmlGetElementType(m_hParse,m_hElement) == WL_TEXT)
  1747.     {
  1748.         DWORD dwAttr = WLHtmlGetTextAttr(m_hParse,m_hElement);
  1749.         char szAttr[16] = "0x";
  1750.         
  1751.         _ltoa((long) dwAttr,&szAttr[2],16);
  1752.         ApiReturnValue("WLHtmlGetTextAttr",szAttr);
  1753.     }
  1754.     else 
  1755.         Error(IDS_ERR_NOTTEXT); 
  1756. }
  1757.  
  1758. void CMainDlg::HtmlGetTagNameAPI()
  1759. {   
  1760.     if (WLHtmlGetElementType(m_hParse,m_hElement) == WL_TAG)
  1761.     {
  1762.         const char *pszTag = WLHtmlGetTagName(m_hParse,m_hElement);
  1763.         ApiReturnValue("WLHtmlGetTagName",pszTag);
  1764.     }
  1765.     else
  1766.         Error(IDS_ERR_NOTTAG); 
  1767. }
  1768.  
  1769. void CMainDlg::HtmlGetTagTypeAPI()
  1770. {   
  1771.     if (WLHtmlGetElementType(m_hParse,m_hElement) == WL_TAG)
  1772.     {
  1773.         UINT nType = WLHtmlGetTagType(m_hParse,m_hElement);
  1774.         char szType[16];
  1775.         
  1776.         _itoa((int) nType,szType,10);
  1777.         ApiReturnValue("WLHtmlGetTagType",szType);
  1778.     }
  1779.     else
  1780.         Error(IDS_ERR_NOTTAG); 
  1781. }
  1782.  
  1783. void CMainDlg::HtmlGetTagAttrAPI()
  1784. {   
  1785.     WORD wType = 0;
  1786.     char szAttr[128] = "",szValue[128] = "";
  1787.     
  1788.     if (m_hTagAttr = WLHtmlGetTagAttr(m_hParse,m_hElement,m_hTagAttr,
  1789.         &wType,szAttr,sizeof(szAttr),szValue,sizeof(szValue)))
  1790.         ApiReturnValue("WLHtmlGetTagAttr",szValue,szAttr);
  1791.     else
  1792.         Error(IDS_ERR_WLAPI,"WLHtmlGetTagAttr"); 
  1793. }
  1794.  
  1795. void CMainDlg::HtmlExtractTagAttrAPI()
  1796. {
  1797.     char szAttr[64] = "";
  1798.     
  1799.     if (ApiDlgHtmlExtractTagAttr(szAttr,sizeof(szAttr)))                               
  1800.     {
  1801.         const char *pszValue = WLHtmlExtractTagAttr(m_hParse,m_hElement,szAttr);
  1802.         
  1803.         if (pszValue == NULL)
  1804.             Error(IDS_ERR_WLAPI,"WLHtmlExtractTagAttr"); 
  1805.         else
  1806.             ApiReturnValue("WLHtmlExtractTagAttr",pszValue);
  1807.     }
  1808. }
  1809.  
  1810. void CMainDlg::HtmlFindTextAPI()
  1811. {   
  1812.     char szText[128] = "";
  1813.     
  1814.     if (ApiDlgHtmlFindText(szText,sizeof(szText))) 
  1815.     {
  1816.         HELEMENT hElement = WLHtmlFindText(m_hParse,m_hElement,szText);
  1817.         
  1818.         if (hElement == NULL)                               
  1819.             Error(IDS_ERR_WLAPI,"WLHtmlFindText"); 
  1820.         else
  1821.         {
  1822.             ApiReturnValue("WLHtmlFindText");
  1823.             m_hElement = hElement;
  1824.             m_hTagAttr = NULL;
  1825.         }
  1826.     }
  1827. }
  1828.  
  1829. void CMainDlg::HtmlFindSpecialAPI()
  1830. {   
  1831.     char szSpecial[128] = "";
  1832.     
  1833.     if (ApiDlgHtmlFindSpecial(szSpecial,sizeof(szSpecial)))
  1834.     {
  1835.         HELEMENT hElement = WLHtmlFindSpecial(m_hParse,m_hElement,szSpecial);
  1836.         
  1837.         if (hElement == NULL)                               
  1838.             Error(IDS_ERR_WLAPI,"WLHtmlFindSpecial"); 
  1839.         else
  1840.         {
  1841.             ApiReturnValue("WLHtmlFindSpecial");
  1842.             m_hElement = hElement;
  1843.             m_hTagAttr = NULL;
  1844.         }
  1845.     }
  1846. }
  1847.  
  1848. void CMainDlg::HtmlFindCommentAPI()
  1849. {   
  1850.     char szComment[128] = "";
  1851.     
  1852.     if (ApiDlgHtmlFindComment(szComment,sizeof(szComment)))
  1853.     {   
  1854.         HELEMENT hElement = WLHtmlFindComment(m_hParse,m_hElement,szComment);
  1855.         
  1856.         if (hElement == NULL)                               
  1857.             Error(IDS_ERR_WLAPI,"WLHtmlFindComment"); 
  1858.         else
  1859.         {
  1860.             ApiReturnValue("WLHtmlFindComment");
  1861.             m_hElement = hElement;
  1862.             m_hTagAttr = NULL;
  1863.         }
  1864.     }
  1865. }
  1866.  
  1867. void CMainDlg::HtmlFindTagTypeAPI()
  1868. {   
  1869.     UINT nTag = HTML_BASE;
  1870.     
  1871.     if (ApiDlgHtmlFindTagType(&nTag))
  1872.     {   
  1873.         HELEMENT hElement = WLHtmlFindTagType(m_hParse,m_hElement,nTag);
  1874.         
  1875.         if (hElement == NULL)                               
  1876.             Error(IDS_ERR_WLAPI,"WLHtmlFindTagType"); 
  1877.         else
  1878.         {
  1879.             ApiReturnValue("WLHtmlFindTagType");
  1880.             m_hElement = hElement;
  1881.             m_hTagAttr = NULL;
  1882.         }
  1883.     }
  1884. }
  1885.  
  1886. void CMainDlg::HtmlFindTagNameAPI()
  1887. {   
  1888.     char szTag[64] = "";
  1889.     
  1890.     if (ApiDlgHtmlFindTagName(szTag,sizeof(szTag)))
  1891.     {   
  1892.         HELEMENT hElement = WLHtmlFindTagName(m_hParse,m_hElement,szTag);
  1893.         
  1894.         if (hElement == NULL)                               
  1895.             Error(IDS_ERR_WLAPI,"WLHtmlFindTagName"); 
  1896.         else
  1897.         {
  1898.             ApiReturnValue("WLHtmlFindTagName");
  1899.             m_hElement = hElement;
  1900.             m_hTagAttr = NULL;
  1901.         }
  1902.     }
  1903. }
  1904.  
  1905. void CMainDlg::HtmlFindTagAttrAPI()
  1906. {   
  1907.     UINT nTag = HTML_BASE;    
  1908.     char szAttr[64] = "",szValue[64] = "";
  1909.         
  1910.     if (ApiDlgHtmlFindTagAttr(szAttr,sizeof(szAttr),szValue,sizeof(szValue),&nTag))
  1911.     {
  1912.         HELEMENT hElement = WLHtmlFindTagAttr(m_hParse,m_hElement,nTag,szAttr,szValue);
  1913.         
  1914.         if (hElement == NULL)                               
  1915.             Error(IDS_ERR_WLAPI,"WLHtmlFindTagAttr"); 
  1916.         else
  1917.         {
  1918.             ApiReturnValue("WLHtmlFindTagAttr");
  1919.             m_hElement = hElement;
  1920.             m_hTagAttr = NULL;
  1921.         }
  1922.     }
  1923. }
  1924.  
  1925. void CMainDlg::HtmlEnumFindTextAPI()
  1926. {
  1927.     char szText[128] = ""; 
  1928.     
  1929.     if (ApiDlgHtmlEnumFindText(szText,sizeof(szText)))
  1930.     {
  1931.         m_nfyEnumFindText.RemoveAll();
  1932.         
  1933.         if (WLHtmlEnumFindText(m_hParse,m_hElement,szText,m_hWnd,WM_WEBLIB_ENUMFINDTEXT))
  1934.             ApiReturnValue("WLHtmlEnumFindText");
  1935.         else
  1936.             Error(IDS_ERR_WLAPI,"WLHtmlEnumFindText"); 
  1937.     }
  1938. }
  1939.  
  1940. void CMainDlg::HtmlEnumFindSpecialAPI()
  1941. {
  1942.     char szSpecial[128] = "";
  1943.     
  1944.     if (ApiDlgHtmlEnumFindSpecial(szSpecial,sizeof(szSpecial)))
  1945.     {
  1946.         m_nfyEnumFindSpecial.RemoveAll();
  1947.         
  1948.         if (WLHtmlEnumFindSpecial(m_hParse,m_hElement,szSpecial,m_hWnd,WM_WEBLIB_ENUMFINDSPEC))
  1949.             ApiReturnValue("WLHtmlEnumFindSpecial");
  1950.         else
  1951.             Error(IDS_ERR_WLAPI,"WLHtmlEnumFindSpecial"); 
  1952.     }
  1953. }
  1954.  
  1955. void CMainDlg::HtmlEnumFindCommentAPI()
  1956. {
  1957.     char szComment[128] = "";
  1958.     
  1959.     if (ApiDlgHtmlEnumFindComment(szComment,sizeof(szComment)))
  1960.     {
  1961.         m_nfyEnumFindComment.RemoveAll();
  1962.         
  1963.         if (WLHtmlEnumFindComment(m_hParse,m_hElement,szComment,m_hWnd,WM_WEBLIB_ENUMFINDCOMM))
  1964.             ApiReturnValue("WLHtmlEnumFindComment");
  1965.         else
  1966.             Error(IDS_ERR_WLAPI,"WLHtmlEnumFindComment"); 
  1967.     }
  1968. }
  1969.  
  1970. void CMainDlg::HtmlEnumFindTagTypeAPI()
  1971. {
  1972.     UINT nTag = HTML_BASE;
  1973.     
  1974.     if (ApiDlgHtmlEnumFindTagType(&nTag))
  1975.     {
  1976.         m_nfyEnumFindTagType.RemoveAll();
  1977.         
  1978.         if (WLHtmlEnumFindTagType(m_hParse,m_hElement,nTag,m_hWnd,WM_WEBLIB_ENUMFINDTAGTYPE))
  1979.             ApiReturnValue("WLHtmlEnumFindTagType");
  1980.         else
  1981.             Error(IDS_ERR_WLAPI,"WLHtmlEnumFindTagType"); 
  1982.     }
  1983. }
  1984.  
  1985. void CMainDlg::HtmlEnumFindTagNameAPI()
  1986. {
  1987.     char szTag[64] = "";
  1988.     
  1989.     if (ApiDlgHtmlEnumFindTagName(szTag,sizeof(szTag)))
  1990.     {
  1991.         m_nfyEnumFindTagName.RemoveAll();
  1992.         
  1993.          if (WLHtmlEnumFindTagName(m_hParse,m_hElement,szTag,m_hWnd,WM_WEBLIB_ENUMFINDTAGNAME))
  1994.              ApiReturnValue("WLHtmlEnumFindTagName");
  1995.         else
  1996.             Error(IDS_ERR_WLAPI,"WLHtmlEnumFindTagName"); 
  1997.     }
  1998. }
  1999.  
  2000. void CMainDlg::HtmlEnumFindTagAttrAPI()
  2001. {   
  2002.     UINT nTag = HTML_BASE;    
  2003.     char szAttr[64] = "",szValue[64] = "";
  2004.         
  2005.     if (ApiDlgHtmlEnumFindTagAttr(szAttr,sizeof(szAttr),szValue,sizeof(szValue),&nTag))
  2006.     {
  2007.         m_nfyEnumFindTagAttr.RemoveAll();
  2008.         
  2009.         if (WLHtmlEnumFindTagAttr(m_hParse,m_hElement,nTag,szAttr,szValue,m_hWnd,WM_WEBLIB_ENUMFINDTAGATTR))
  2010.             ApiReturnValue("WLHtmlEnumFindTagAttr");
  2011.         else
  2012.             Error(IDS_ERR_WLAPI,"WLHtmlEnumFindTagAttr"); 
  2013.     }
  2014. }
  2015.  
  2016. void CMainDlg::AppendFormDataAPI()
  2017. {   
  2018.     char szData[MAX_FORMDATA] = "",szName[64] = "";
  2019.     
  2020.     if (ApiDlgAppendFormData(szData,sizeof(szData),szName,sizeof(szName)))
  2021.     {
  2022.         m_hFormData = WLAppendFormData(m_hFormData,szName,szData,lstrlen(szData) + 1);
  2023.         
  2024.         if (m_hFormData == NULL)
  2025.             Error(IDS_ERR_WLAPI,"WLAppendFormData"); 
  2026.         else
  2027.         {
  2028.             OnUtilAPI();
  2029.             ApiReturnValue("WLAppendFormData");
  2030.         }
  2031.     }
  2032. }
  2033.  
  2034. void CMainDlg::GetFormDataLengthAPI()
  2035. {
  2036.     UINT nLength = WLGetFormDataLength(m_hFormData);
  2037.     char szLength[16];
  2038.     
  2039.     ApiReturnValue("WLGetFormDataLength",_itoa((int) nLength,szLength,10));
  2040. }
  2041.  
  2042. void CMainDlg::ParseAbsoluteURLAPI()
  2043. {                          
  2044.     char szURL[128] = "";
  2045.     
  2046.     if (ApiDlgParseAbsoluteURL(szURL,sizeof(szURL)))
  2047.     {
  2048.         char szProtocol[32] = "",szHost[64] = "",szPath[128] = "";
  2049.         UINT nPort = 0;
  2050.     
  2051.         if (WLParseAbsoluteURL(szURL,szProtocol,sizeof(szProtocol),szHost,sizeof(szHost),
  2052.             &nPort,szPath,sizeof(szPath)))
  2053.         {
  2054.             char szBuf[256];
  2055.             
  2056.             wsprintf(szBuf,"%s %s %d %s",szProtocol,szHost,nPort,szPath);
  2057.             ApiReturnValue("WLParseAbsoluteURL",szBuf);
  2058.         }
  2059.         else
  2060.               Error(IDS_ERR_WLAPI,"WLParseAbsoluteURL");
  2061.     }
  2062. }
  2063.  
  2064. ///////////////////////////////////////////////////////////////////////////// 
  2065. // Message handler for API notifications.
  2066.  
  2067. LONG CMainDlg::OnApiNotification(UINT wParam,LONG lParam)
  2068. {
  2069.     CStringArray *pnfyArray = m_pnfyArray;    
  2070.     char szMessage[512];
  2071.     
  2072.     switch (wParam)
  2073.     {
  2074.         case WLN_BEGINPROGRESS: 
  2075.         { 
  2076.             DWORD dwTrx = WLNGetTransaction(lParam);
  2077.             const char *pszProgress = WLNGetProgressString(lParam);
  2078.             
  2079.             wsprintf(szMessage,"BEGINPROGRESS: %ld %s",dwTrx,pszProgress);
  2080.             break;
  2081.         }
  2082.         
  2083.         case WLN_SETPROGRESSRANGE:      
  2084.         {   
  2085.             DWORD dwTrx = WLNGetTransaction(lParam);
  2086.             DWORD dwMaximum = WLNGetProgressMaximum(lParam);
  2087.             
  2088.             wsprintf(szMessage,"SETPROGRESSRANGE: %ld %ld",dwTrx,dwMaximum);
  2089.             break;
  2090.         }        
  2091.             
  2092.         case WLN_MAKINGPROGRESS:      
  2093.         {   
  2094.             DWORD dwTrx = WLNGetTransaction(lParam);
  2095.             DWORD dwProgress = WLNGetProgressValue(lParam);
  2096.             const char *pszProgress = WLNGetProgressString(lParam);
  2097.             
  2098.             wsprintf(szMessage,"MAKINGPROGRESS: %ld %ld %s",dwTrx,dwProgress,pszProgress);
  2099.             break;
  2100.         }
  2101.         
  2102.         case WLN_ENDPROGRESS:      
  2103.         {   
  2104.             DWORD dwTrx = WLNGetTransaction(lParam);
  2105.             
  2106.             wsprintf(szMessage,"ENDPROGRESS: %ld",dwTrx);
  2107.             break;
  2108.         }
  2109.         
  2110.         case WLN_FINISHED:      
  2111.         {   
  2112.             DWORD dwTrx = WLNGetTransaction(lParam);
  2113.             DWORD dwWindow = WLNGetWindow(lParam);
  2114.             
  2115.             wsprintf(szMessage,"FINISHED: %ld %ld",dwTrx,dwWindow);
  2116.             break;
  2117.         }
  2118.         
  2119.         case WLN_CANCELED:      
  2120.         {   
  2121.             DWORD dwTrx = WLNGetTransaction(lParam);
  2122.             
  2123.             wsprintf(szMessage,"CANCELED: %ld",dwTrx);
  2124.             break;
  2125.         }            
  2126.         
  2127.         case WLN_URLECHO:
  2128.         {   
  2129.             DWORD dwWindow = WLNGetWindow(lParam);
  2130.             const char *pszURL = WLNGetURL(lParam);
  2131.             const char *pszMIME = WLNGetMIMEType(lParam);
  2132.             const char *pszRef = WLNGetReferrer(lParam);
  2133.             
  2134.             wsprintf(szMessage,"URLECHO: %ld %s %s %s",dwWindow,pszURL,pszMIME,pszRef);
  2135.             pnfyArray = &m_nfyRegURLEcho;
  2136.             break;
  2137.         }
  2138.         
  2139.         case WLN_OPENURL:
  2140.         {   
  2141.             DWORD dwWindow = WLNGetWindow(lParam);
  2142.             DWORD dwTrx = WLNGetTransaction(lParam);
  2143.             DWORD dwFlags = WLNGetFlags(lParam);
  2144.             const char *pszURL = WLNGetURL(lParam);
  2145.             const char *pszMIME = WLNGetMIMEType(lParam);
  2146.             const char *pszSaveFile = WLNGetSaveFile(lParam);
  2147.             const char *pszFormData = WLNGetFormData(lParam);
  2148.             
  2149.             wsprintf(szMessage,
  2150.                 "OPENURL: WIN=%ld TX=%ld FL=%ld URL=%s MIME=%s FILE=%s FMDATA=%s",
  2151.                 dwWindow,dwTrx,dwFlags,pszURL,pszMIME,pszSaveFile,pszFormData);
  2152.             pnfyArray = &m_nfyRegProtocol;
  2153.             break;
  2154.         }
  2155.         
  2156.         case WLN_WINDOWCHANGE:
  2157.         {   
  2158.             DWORD dwWindow = WLNGetWindow(lParam);
  2159.             DWORD dwFlags = WLNGetFlags(lParam);
  2160.             DWORD dwX = WLNGetX(lParam);
  2161.             DWORD dwY = WLNGetY(lParam);
  2162.             DWORD dwWidth = WLNGetWidth(lParam);
  2163.             DWORD dwHeight = WLNGetHeight(lParam);
  2164.             
  2165.             wsprintf(szMessage,"WINDOWCHANGE: WIN=%ld FL=%ld X=%ld Y=%ld CX=%ld CY=%ld",
  2166.                 dwWindow,dwFlags,dwX,dwY,dwWidth,dwHeight);
  2167.             pnfyArray = &m_nfyRegWindowChange;
  2168.             break;
  2169.         }
  2170.         
  2171.         case WLN_QUERYVIEWER:
  2172.         {   
  2173.             const char *pszURL = WLNGetURL(lParam);
  2174.             const char *pszMIME = WLNGetMIMEType(lParam); 
  2175.             char szFile[128];
  2176.             
  2177.             wsprintf(szMessage,"QUERYVIEWER: %s %s",pszURL,pszMIME);
  2178.             pnfyArray = &m_nfyRegViewer;
  2179.             
  2180.             wsprintf(szFile,"C:\\TEMP\\%lx.HTM",::GetTickCount());
  2181.             WLNSetFileName(lParam,szFile);            // return filename to browser
  2182.             break;
  2183.         }
  2184.         
  2185.         case WLN_VIEWDOCFILE:
  2186.         {
  2187.             const char *pszURL = WLNGetURL(lParam);
  2188.             const char *pszMIME = WLNGetMIMEType(lParam);
  2189.             const char *pszFile = WLNGetFileName(lParam);
  2190.             DWORD dwWindow = WLNGetWindow(lParam);
  2191.             
  2192.             wsprintf(szMessage,"VIEWDOCFILE: %s %s %s %ld",pszURL,pszMIME,pszFile,dwWindow);
  2193.             pnfyArray = &m_nfyRegViewer;
  2194.             break;
  2195.         }
  2196.         
  2197.         case WLN_BUTTONCLICKED:
  2198.         {                                                                                    
  2199.             UINT nButtonID = WLNGetButtonID(lParam);
  2200.             
  2201.             wsprintf(szMessage,"BUTTONCLICKED: %u",nButtonID);
  2202.             pnfyArray = &m_nfyToolbar;
  2203.             break;
  2204.         }
  2205.         
  2206.         case WLN_BROWSERSTART:
  2207.         {   
  2208.             lstrcpy(szMessage,"BROWSERSTART");
  2209.             pnfyArray = NULL;                        // recorded only to log
  2210.             break;
  2211.         }
  2212.         
  2213.         case WLN_BROWSEREXIT:
  2214.         {   
  2215.             lstrcpy(szMessage,"BROWSEREXIT");
  2216.             pnfyArray = NULL;                        // recorded only to log
  2217.             break;
  2218.         }        
  2219.     }
  2220.     
  2221.     if (pnfyArray != NULL)
  2222.         pnfyArray->Add(CString(szMessage));
  2223.     
  2224.     if (m_bLogging)
  2225.     {
  2226.         ofstream outfile(m_strLogFile,ios::out | ios::app);
  2227.         
  2228.         if (outfile.is_open() && outfile.good())
  2229.         {                   
  2230.             outfile << "NFY --> " << szMessage << endl;
  2231.             outfile.close();
  2232.         }
  2233.     }
  2234.     return 0;
  2235. }
  2236.  
  2237. ///////////////////////////////////////////////////////////////////////////// 
  2238. //  Message handler for HTML parsing notifications.
  2239.  
  2240. LONG CMainDlg::OnEnumParseTree(UINT wParam,LONG lParam)
  2241. {
  2242.     EnumHtmlElement(m_nfyEnumParseTree,"ENUMTREE",wParam,lParam);               
  2243.     return TRUE;                        // return TRUE to continue enumeration
  2244. }
  2245.  
  2246. LONG CMainDlg::OnEnumFindText(UINT wParam,LONG lParam)
  2247. {   
  2248.     EnumHtmlElement(m_nfyEnumFindText,"ENUMTEXT",wParam,lParam);    
  2249.     return TRUE;
  2250. }
  2251.  
  2252. LONG CMainDlg::OnEnumFindSpecial(UINT wParam,LONG lParam)
  2253. {   
  2254.     EnumHtmlElement(m_nfyEnumFindSpecial,"ENUMSPEC",wParam,lParam);    
  2255.     return TRUE;
  2256. }
  2257.  
  2258. LONG CMainDlg::OnEnumFindComment(UINT wParam,LONG lParam)
  2259. {   
  2260.     EnumHtmlElement(m_nfyEnumFindComment,"ENUMCOMM",wParam,lParam);    
  2261.     return TRUE;
  2262. }
  2263.  
  2264. LONG CMainDlg::OnEnumFindTagType(UINT wParam,LONG lParam)
  2265. {   
  2266.     EnumHtmlElement(m_nfyEnumFindTagType,"ENUMTYPE",wParam,lParam);    
  2267.     return TRUE;
  2268. }
  2269.  
  2270. LONG CMainDlg::OnEnumFindTagName(UINT wParam,LONG lParam)
  2271. {   
  2272.     EnumHtmlElement(m_nfyEnumFindTagName,"ENUMTAG",wParam,lParam);    
  2273.     return TRUE;
  2274. }
  2275.  
  2276. LONG CMainDlg::OnEnumFindTagAttr(UINT wParam,LONG lParam)
  2277. {   
  2278.     EnumHtmlElement(m_nfyEnumFindTagAttr,"ENUMATTR",wParam,lParam);    
  2279.     return TRUE;
  2280. }
  2281.  
  2282. ///////////////////////////////////////////////////////////////////////////// 
  2283. // Handler for message sent by DLL when dialog is destroyed, We enable our
  2284. // window so we become active window after DLL dialog dies.
  2285.  
  2286. LONG CMainDlg::OnApiDlgDestroy(UINT wParam,LONG lParam)
  2287. {
  2288.     EnableWindow(TRUE); 
  2289.     return 0;
  2290. }
  2291.  
  2292. ///////////////////////////////////////////////////////////////////////////// 
  2293. // Methods to display API results in prompt line (also performs logging).
  2294.  
  2295. void CMainDlg::ApiReturnValue(const char *pszAPI,const char *pszParm1,const char *pszParm2)
  2296. {                                     
  2297.     CString strMsg = pszAPI;
  2298.     
  2299.     if (pszParm1 == NULL)
  2300.     {   
  2301.         CString strSuccess;
  2302.         strSuccess.LoadString(IDS_PROMPT_SUCCESS);
  2303.         
  2304.         strMsg += ": ";
  2305.         strMsg += strSuccess;
  2306.     }
  2307.     else
  2308.     {
  2309.         strMsg += ": [";
  2310.         strMsg += pszParm1;
  2311.         strMsg += "]";
  2312.         
  2313.         if (pszParm2 != NULL)     
  2314.         {
  2315.             strMsg += " [";
  2316.             strMsg += pszParm2;
  2317.             strMsg += "]";
  2318.         }
  2319.     }
  2320.     GetDlgItem(IDC_PROMPT)->SetWindowText(strMsg);
  2321.     
  2322.     if (m_bLogging)
  2323.     {
  2324.         ofstream outfile(m_strLogFile,ios::out | ios::app);
  2325.         
  2326.         if (outfile.is_open() && outfile.good())
  2327.         {                   
  2328.             outfile << "API --> " << strMsg << endl;
  2329.             outfile.close();
  2330.         }
  2331.     }
  2332. }
  2333.  
  2334. void CMainDlg::Error(UINT nMsgID,const char *pszParm)
  2335. {
  2336.     CString strMsg;
  2337.     strMsg.LoadString(nMsgID);
  2338.     
  2339.     if (pszParm != NULL)
  2340.         strMsg += pszParm;
  2341.     GetDlgItem(IDC_PROMPT)->SetWindowText(strMsg);
  2342.     
  2343.     if (m_bLogging)
  2344.     {
  2345.         ofstream outfile(m_strLogFile,ios::out | ios::app);
  2346.         
  2347.         if (outfile.is_open() && outfile.good())
  2348.         {                   
  2349.             outfile << "ERROR --> " << strMsg << endl;
  2350.             outfile.close();
  2351.         }
  2352.     }
  2353. }
  2354.  
  2355. ///////////////////////////////////////////////////////////////////////////// 
  2356. // Method to format info about HTML element in string (and also to log file).
  2357.  
  2358. void CMainDlg::EnumHtmlElement(CStringArray &nfyArray,const char *pszEnum,
  2359.     UINT wParam,LONG lParam)
  2360. {               
  2361.     HELEMENT hElement = (HELEMENT) lParam;
  2362.     char szMessage[256];
  2363.     
  2364.     switch (wParam)
  2365.     {
  2366.         case WL_ROOT:   
  2367.             wsprintf(szMessage,"ROOT");
  2368.             break;
  2369.             
  2370.         case WL_TEXT:
  2371.             wsprintf(szMessage,"TEXT: %.240s %ld",
  2372.                 WLHtmlGetElementText(m_hParse,hElement),
  2373.                 WLHtmlGetTextAttr(m_hParse,hElement));
  2374.             break;
  2375.             
  2376.         case WL_TAG:
  2377.             wsprintf(szMessage,"TAG: %s %d",
  2378.                 WLHtmlGetTagName(m_hParse,hElement),
  2379.                 WLHtmlGetTagType(m_hParse,hElement));
  2380.             break;
  2381.             
  2382.         case WL_SPECIALCHAR:
  2383.             wsprintf(szMessage,"SPECIALCHAR: %s",
  2384.                 WLHtmlGetElementText(m_hParse,hElement));
  2385.             break;
  2386.             
  2387.         case WL_COMMENT:
  2388.             wsprintf(szMessage,"COMMENT: %.240s",
  2389.                 WLHtmlGetElementText(m_hParse,hElement));
  2390.             break;
  2391.             
  2392.         default:
  2393.             lstrcpy(szMessage,"???");
  2394.     }
  2395.     
  2396.     nfyArray.Add(CString(szMessage));
  2397.     
  2398.     if (m_bLogging)
  2399.     {
  2400.         ofstream outfile(m_strLogFile,ios::out | ios::app);
  2401.         
  2402.         if (outfile.is_open() && outfile.good())
  2403.         {                   
  2404.             outfile << pszEnum << " --> " << szMessage << endl;
  2405.             outfile.close();
  2406.         }
  2407.     }       
  2408. }
  2409.  
  2410. ///////////////////////////////////////////////////////////////////////////// 
  2411. // Fill info listbox with strings from string array.
  2412.  
  2413. void CMainDlg::FillInfoListbox(CStringArray &nfyArray)
  2414. {
  2415.     m_ListboxInfo.ResetContent();
  2416.     for (int nIdx=0;nIdx < nfyArray.GetSize();nIdx++)
  2417.         m_ListboxInfo.AddString(nfyArray.GetAt(nIdx));
  2418. }
  2419.  
  2420. ///////////////////////////////////////////////////////////////////////////// 
  2421. // Find string in status string array and remove it.
  2422.  
  2423. void CMainDlg::RemoveFromStatusArray(CStringArray &staArray,CString &strItem)
  2424. {
  2425.     for (int nIdx=0;nIdx < staArray.GetSize();nIdx++)
  2426.         if (strItem == staArray[nIdx])
  2427.         {
  2428.             staArray.RemoveAt(nIdx);
  2429.             break;
  2430.         }
  2431. }
  2432.  
  2433.